본문 바로가기

전체 글

(214)
5.3. 싱글턴 bean과 프로토타입 bean 사이의 의존성 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes-sing-prot-interaction 싱글턴 bean을 프로토타입 bean의 의존성과 함께 사용할때는, 의존성이 인스턴스화될 때 생긴다는 것을 주의하라. 그래서 프로토타입 bean을 싱글턴 bean 안으로 주입하면 새로운 프로토타입 bean이 인스턴스화되어 싱글턴 bean 안으로 들어간다. 싱글턴 bean을 프로토타입 bean의 의존성과 함께 사용할때는 의존성이 인스턴스 시점에 생긴다는 것을 주의하라. 그래서 프로토타입 bean을 싱글턴 bean 안으로 주입하면 새로운 프로토타입 bean이 인스턴스화..
5.2. 프로토타입 Scope 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes-prototype 싱글턴이 아닌 프로토타입 scope는 해당 bean에 대한 요청이 있을 때마다 새로운 bean의 인스턴스를 생성하도록 한다. 즉, bean이 다른 bean으로 주입되거나 컨테이너에 getBean() 메소드를 호출함으로써 bean을 요청하게 된다. 규칙상, 모든 stateful한 bean들에는 프로토타입 scope를 써야하고, stateless한 bean들에는 싱글턴 bean을 써야한다. 다음 다이어그램은 스프링 프로토타입 scope를 보여준다. (데이터 접근 객체(DAO)는 프로토타입..
5.1. 싱글턴 Scope 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes-singleton 단 하나의 공유된 싱글턴 bean 인스턴스만이 관리된다. 그리고 ID를 통해 bean을 요청하면, 스프링 컨테이너에 의해 하나의 특정한 bean 인스턴스가 반환된다. 다르게 말하면, 싱글턴으로 scope를 잡은 bean을 정의했다면 스프링 IoC 컨테이너는 정확하게 하나의 인스턴스만 만들어낸다. 이 single 인스턴스는 싱글턴 bean들의 캐시에 저장되고, 그 후에 해당 bean에 대한 모든 요청과 참조에 대해서는 캐시된 객체가 반환된다. 다음 그림은 싱글턴 scope가 어떻게 작동..
5. Bean Scopes 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes bean을 정의하는 것은, 실제 인스턴스가 생성될 때 필요한 레시피를 만드는 것이다. bean 정의가 레시피라는 발상은 중요하다. 왜냐하면 하나의 레시피를 통해 많은 객체 인스턴스를 만들어낸다는 뜻이 되기 때문이다. bean 정의를 통해, 생성된 객체에 다양한 의존성이나 설정값들을 채워넣을 뿐만 아니라 객체의 scope도 제어하게 된다. 이러한 접근은 강력하고 유연하다. 자바 클래스 레벨에서 scope를 설정하는 대신에 설정을 통해 scope를 선택할 수 있기 때문이다. bean들은 다양한 scope ..
4.6.2. 임의적인 메서드 교체 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-arbitrary-method-replacement '임의적인 메서드 교체'는 lookup 메서드 주입보다 조금 덜 유용한 메서드 주입 방식이다. 즉, 임의적인 메서드를 다른 메서드 구현체로 교체하는 것이다. 이 기능이 실제로 필요할 때까지는 이 부분을 안심하고 건너뛰어도 괜찮다. (일단 건너뜀...)
4.6.1. 메서드 주입 검색 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-lookup-method-injection 메서드 주입 검색은 메서드를 오버라이드하게 해주고, 다른 bean에 대한 검색 결과를 반환하게 해주는 컨테이너의 능력을 말한다. 검색은 보통 앞선 부분에서 서술했던 프로토타입 bean과 관련된다. 스프링 프레임워크는 CGLIB 라이브러리의 바이트 코드 생성을 사용하여 이러한 메서드 주입을 구현한다. 이를 통해 메서드를 오버라이드하는 서브클래스를 동적으로 생성한다. 이 동적인 서브클래스가 작동하도록 하기 위해서는, 서브클래스가 final이어서도 안되고 오버라이드될 메소드가 ..
4.6. 메서드 주입 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-method-injection 대부분의 애플리케이션에서 대부분의 bean들은 싱글턴이다. 싱글턴 bean이 다른 싱글턴 bean과 협력해야하거나 싱글턴이 아닌 bean이 다른 싱글턴이 아닌 bean과 협력해야할 때, 여러분은 그 중 한 쪽을 다른 쪽의 프로퍼티로 세팅할 것이다. 문제는 bean들의 라이프사이클이 다를 때다. 싱글턴 bean A가 메서드를 호출할 때마다 프로토타입 bean B에 의존한다고 가정해보자. 컨테이너는 싱글턴 bean A를 딱 한번만 만든다. 그리고 프로퍼티를 세팅할 기회를 딱 한번만 준다...
4.5.2. Autowiring으로부터 bean 제외시키기 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-autowire-candidate bean마다 autowiring을 해주는 환경에서는, bean을 autowiring으로부터 제외시킬 수 있다. 스프링의 XML 형식에서는 요소의 'autowire-candidate' 속성을 false로 세팅하면 된다. 컨테이너는 그 bean을 autowiring 인프라에서(@Autowired 같은 어노테이션 스타일의 설정에서도) 사용할 수 없게 만든다. ※'autowire-candidate' 속성은 타입 기반의 autowiring에만 적용될 수 있도록 설계되었다. 이 속성은 aut..