OOP35 8-2. 빈 생명주기 콜백 사용법 스프링은 크게 3가지 방식으로 빈 생명주기 콜백을 지원한다.@PostConstruct, @PreDestroy 어노테이션 (권장)설정 정보 (@Bean(initMethod = "method1", destroyMethod = "method2"))인터페이스 (InitializingBean, DisposableBean) 1. @PostConstruct, @PreDestroy 어노테이션 (권장)의존성 주입 직후 실행할 메서드와 소멸 직전 실행할 메서드에 각 어노테이션을 붙이는 방식이다. 최신 스프링에서 권장하는 방법으로, 컴포넌트 스캔과 함께 사용하기 좋다. 특징최신 스프링에서 권장하는 방법이다.어노테이션 하나만 붙이면 되는 방법으로, 가장 편리하다.스프링에 종속적이지 않은 자바 표준 기술로, 다른 컨테이.. 2024. 5. 27. 8-1. 빈 생명주기 콜백 (이론) 스프링 빈의 생성 과정은 대략 다음과 같다.객체 생성의존성 주입단, 생성자 주입 방식은 예외다. 객체 생성과 동시에 의존성 주입이 일어난다.생성자의 호출 시점을 생각해보면 당연한 이야기다. 스프링 빈은 객체가 생성된 후, 필요한 의존성을 모두 주입받은 다음에 자신의 작업을 시작해야 한다.의존성을 주입받기 전에 작업을 시작하면, 의도와 다르게 동작할 가능성이 높다. 다음 코드는 그 예시를 단적으로 보여준다. NetworkClient 클래스는 setter를 통해 url을 주입받는다.스프링 빈을 주입받지는 않고, String 타입 객체를 외부에서 주입받을 뿐이다. 생성자 호출 시점에서 url을 바탕으로 연결을 생성하고 데이터를 전송하는 초기 작업을 수행한다. (connect(), call())public cl.. 2024. 5. 26. 7-6. 해당 타입의 빈이 모두 필요한 경우 같은 타입의 빈 여러개 중 어느 하나만 필요한 경우도 있지만, 반대로 해당 타입의 빈이 모두 필요한 경우도 있다. 클라이언트의 선택에 따라 다르게 동작하도록 구현하는 전략 패턴이 대표적인 예시다. 예를 들어, 사용자가 고정 할인과 비율 할인 중 선택할 수 있다고 한다면, OrderService는 fixDiscountPolicy, rateDiscountPolicy 두개의 빈이 모두 필요하다. 방법방법은 간단하다. 받으려는 타입의 빈을 List나 Map으로 받으면, 해당 타입의 빈을 모두 전달(주입)받을 수 있다. DiscountPolicy 타입의 빈을 모두 받는 Service 클래스를 하나 생성한다.calcDiscount() 메서드에서 policyCode를 전달받아 코드마다 다른 할인 정책을 적용하도록 .. 2024. 5. 26. 7-2. 의존관계 주입 옵션 처리 @Autowired의 required 옵션 기본값은 true이기 때문에 의존성 주입 단계에서 주입할 빈이 없으면 오류가 발생한다. 하지만 주입할 스프링 빈이 없어도 동작해야 할 경우가 있다. (의존성을 나중에 주입하는 등) 자동 주입 대상을 설정하는 방법으로 다음 3가지가 있다.@Autowired(required = false)주입할 빈이 없으면 메서드 자체가 호출되지 않음.@Nullable (org.springframework.lang.@Nullable)주입할 빈이 없으면 null이 주입됨Optional주입할 빈이 없으면 Optional.empty가 입력됨. 테스트 코드public class AutowiredTest { @Test void AutowiredOption() { /.. 2024. 5. 26. 이전 1 2 3 4 ··· 9 다음