diff --git a/build.gradle.kts b/build.gradle.kts index fc5abdc..edfc151 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -19,8 +19,10 @@ repositories { dependencies { implementation("org.springframework.boot:spring-boot-starter") + implementation("org.projectlombok:lombok:1.18.30") testImplementation("org.springframework.boot:spring-boot-starter-test") testRuntimeOnly("org.junit.platform:junit-platform-launcher") + annotationProcessor("org.projectlombok:lombok") } tasks.withType { diff --git a/src/main/java/org/javaspringcourse/controller/AccountBaseLevel.java b/src/main/java/org/javaspringcourse/controller/AccountBaseLevel.java new file mode 100644 index 0000000..d2f2d3a --- /dev/null +++ b/src/main/java/org/javaspringcourse/controller/AccountBaseLevel.java @@ -0,0 +1,30 @@ +package org.javaspringcourse.controller; + +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.javaspringcourse.service.TransactionService; +import org.springframework.stereotype.Controller; + +@Slf4j +@Controller +@RequiredArgsConstructor +public class AccountBaseLevel { + private final TransactionService service; // Внедрение через конструктор + + @PostConstruct + public void create() { + log.info("Create AccountBaseLevel bean"); + } + + public void someOperation() { + service.createTransaction(); + service.transaction(); + } + + @PreDestroy + public void destroy() { + log.info("Destroy AccountBaseLevel bean"); + } +} diff --git a/src/main/java/org/javaspringcourse/controller/AccountPremiumLevel.java b/src/main/java/org/javaspringcourse/controller/AccountPremiumLevel.java new file mode 100644 index 0000000..8ee8a6b --- /dev/null +++ b/src/main/java/org/javaspringcourse/controller/AccountPremiumLevel.java @@ -0,0 +1,41 @@ +package org.javaspringcourse.controller; + +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.javaspringcourse.service.TransactionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Controller; + +@Slf4j +@Controller +public class AccountPremiumLevel { + @Autowired + private TransactionService deposit; // Внедрение через поле + + @Setter(onMethod_ = @Autowired) + @Qualifier("WithdrawService") + private TransactionService withdraw; // Внедрение через сеттер + + @PostConstruct + public void create() { + log.info("Create AccountPremiumLevel bean"); + } + + public void deposit() { + deposit.createTransaction(); + deposit.transaction(); + } + + public void withdraw() { + withdraw.createTransaction(); + withdraw.transaction(); + } + + @PreDestroy + public void destroy() { + log.info("Destroy AccountPremiumLevel bean"); + } +} diff --git a/src/main/java/org/javaspringcourse/service/TransactionService.java b/src/main/java/org/javaspringcourse/service/TransactionService.java new file mode 100644 index 0000000..ce5f538 --- /dev/null +++ b/src/main/java/org/javaspringcourse/service/TransactionService.java @@ -0,0 +1,6 @@ +package org.javaspringcourse.service; + +public interface TransactionService { + void createTransaction(); + void transaction(); +} diff --git a/src/main/java/org/javaspringcourse/service/implementation/DepositService.java b/src/main/java/org/javaspringcourse/service/implementation/DepositService.java new file mode 100644 index 0000000..d129345 --- /dev/null +++ b/src/main/java/org/javaspringcourse/service/implementation/DepositService.java @@ -0,0 +1,34 @@ +package org.javaspringcourse.service.implementation; + +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; +import lombok.extern.slf4j.Slf4j; +import org.javaspringcourse.service.TransactionService; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +@Primary +public class DepositService implements TransactionService { + + @PostConstruct + public void create() { + log.info("Create DepositService bean"); + } + + @Override + public void createTransaction() { + System.out.println("Create Deposit Transaction"); + } + + @Override + public void transaction() { + System.out.println("Deposit transaction..."); + } + + @PreDestroy + public void destroy() { + log.info("Destroy DepositService bean"); + } +} diff --git a/src/main/java/org/javaspringcourse/service/implementation/WithdrawService.java b/src/main/java/org/javaspringcourse/service/implementation/WithdrawService.java new file mode 100644 index 0000000..e19ae8c --- /dev/null +++ b/src/main/java/org/javaspringcourse/service/implementation/WithdrawService.java @@ -0,0 +1,32 @@ +package org.javaspringcourse.service.implementation; + +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; +import lombok.extern.slf4j.Slf4j; +import org.javaspringcourse.service.TransactionService; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +public class WithdrawService implements TransactionService { + + @PostConstruct + public void create() { + log.info("Create WithdrawService bean"); + } + + @Override + public void createTransaction() { + System.out.println("Create Withdraw Transaction"); + } + + @Override + public void transaction() { + System.out.println("Withdraw transaction..."); + } + + @PreDestroy + public void destroy() { + log.info("Destroy WithdrawService bean"); + } +} \ No newline at end of file