'Spring/Core'에 해당되는 글 19건

  1. 2007.12.14 메소드 삽입
  2. 2007.12.10 Autowiring
  3. 2007.12.10 lazy-init 속성
  4. 2007.12.10 간략화 된 설정
  5. 2007.12.09 null 값 다루기

메소드 삽입

Spring/Core 2007. 12. 14. 12:05
컨테이너에서 관리되는 대부분의 bean들은 singleton일 것입니다.
singleton bean이 non-singleton bean 과 의존성을 가진다면 non-singleton bean도 의도와 다르게 singeton으로 관리 되는 문제가 생깁니다.
아래 설정이 문제가 생기는 경우 입니다.

foo 의 scope는 prototype이지만 bar에서는 항상 같은 bean을 참조 할 것입니다. bar 자체가 단 하나만 생성되기 때문 입니다. 서로 다른 scope의 문제를 해결하기 위해 몇몇 방법이 있습니다.

첫번째 방법은 LifeCycle 인터페이스들 중의 하나인 BeanFactoryAware를 사용 하는 것 입니다. BeanFactoryAware 인터페이스를 구현한 bean은 생성이 되고 나서 콜백메소드 setBeanFactory(BeanFactory beanFactory) 를 통해 BeanFactory가 주입 됩니다. foo를 가져오는 getFoo() 메소드에서 beanFactory.getBean("foo") 를 이용한다면 항상 새로운 foo를 얻을 수 있습니다. 하지만 이 방법은 Spring API에 의존적이므로 좋은 방법은 아닙니다.

두번째 방법은 <bean /> 요소의 자식 요소인 <lookup-method /> 요소를
사용 하는 것입니다. 이 것은 bar에 대한 Proxy객체를
CGLIB를 이용하여 만드므로 CGLIB가 클래스패스에 존재 해야 합니다. 이 방법은 Spring API에 전혀 의존적이지 않습니다.

'Spring > Core' 카테고리의 다른 글

<aop:scoped-proxy /> 작동 방식  (5) 2007.12.14
Bean scopes  (0) 2007.12.14
메소드 삽입  (0) 2007.12.14
Autowiring  (0) 2007.12.10
lazy-init 속성  (0) 2007.12.10
간략화 된 설정  (0) 2007.12.10
Posted by 째코

댓글을 달아 주세요

Autowiring

Spring/Core 2007. 12. 10. 22:53
지금까지는 의존성 있는 bean들을 묶기 위해(DI) <property /> 나 <constructor-arg /> 요소를 사용해 왔습니다. 하지만 보다 간단한 방법이 있으니 그것은 바로 <bean /> 요소의 autowire 속성 입니다.
autowire 속성은 다음과 같은 5가지의 값을 설정 할 수 있습니다.
no default 값이며 Autowiring이 전혀 없습니다.
byName 이 값을 사용하는 bean이 foo 라는 프로퍼티가 존재 한다면 bean의 id가 foo인것을 찾아 Autowiring 합니다.
발견 되지 않는다면 Autowiring은 무시 됩니다.
byType 이 값을 사용하는 bean이 Foo 라는 타입의 프로퍼티가 존재 한다면 bean의 타입이 Foo인 것을 찾아 Autowiring 합니다.
만약 2개 이상 발견 된다면 예외를 던지며 하나도 발견 되지 않는다면 Autowiring은 무시 됩니다. 하나도 발견 되지 않을 경우 예외가 던져지길 원한다면 dependency-check="objects" 속성을 사용 합니다.
constructor byType과 비슷하지만 생성자의 인자에 적용 됩니다. byTyp과 마찬가지로 같은 타입의 bean이 2개 이상 발견되면 예외를 던집니다.
autodetect constructorbyType으로 적용 되는데 만약 디폴트 생성자가 발견된다면 byType 으로 적용 됩니다.

Autowiring 의 장점
- XML 설정량 감소 됩니다.
- bean이 변경될 때 XML을 다시 설정할 필요가 없습니다.

Autowiring 의 단점
- 명시적이지 않아서 모호한 감이 있습니다.

'Spring > Core' 카테고리의 다른 글

Bean scopes  (0) 2007.12.14
메소드 삽입  (0) 2007.12.14
Autowiring  (0) 2007.12.10
lazy-init 속성  (0) 2007.12.10
간략화 된 설정  (0) 2007.12.10
null 값 다루기  (0) 2007.12.09
Posted by 째코

댓글을 달아 주세요

lazy-init 속성

Spring/Core 2007. 12. 10. 22:52

BeanFactory에서의 bean 관리 방식은 반드시 해당 빈에 대한 요청이 올 때(다른 bean에서의 참조 포함) 생성 하므로 lazy-init 속성은 무시 됩니다.

ApplicationContext는 컨테이너 생성 시점에서 lazy-init 속성이 디폴트(false) 라면 모든 bean을 미리 생성 합니다. 만약 lazy-init 속성이 true 일 경우 그 bean은 BeanFactory 처럼 요청이 올 때 생성 하게 됩니다.

이 경우 ApplicationContext 컨테이너를 생성 하면 bar만 생성이 됩니다.

하지만 아래의 설정 처럼 foo의 lazy-init 속성이 true 일 경우에도 bar에서 foo를 참조한다면 그것 또한 요청에 해당 하므로 foo도 생성 하게 됩니다.

'Spring > Core' 카테고리의 다른 글

메소드 삽입  (0) 2007.12.14
Autowiring  (0) 2007.12.10
lazy-init 속성  (0) 2007.12.10
간략화 된 설정  (0) 2007.12.10
null 값 다루기  (0) 2007.12.09
Collections 사용하기  (0) 2007.12.09
Posted by 째코

댓글을 달아 주세요

간략화 된 설정

Spring/Core 2007. 12. 10. 00:14
간략화 되지 않은 상태

간략화 된 상태

하지만 <ref local="parent" /> 에 대한 간략화된 형태는 없습니다.

'Spring > Core' 카테고리의 다른 글

Autowiring  (0) 2007.12.10
lazy-init 속성  (0) 2007.12.10
간략화 된 설정  (0) 2007.12.10
null 값 다루기  (0) 2007.12.09
Collections 사용하기  (0) 2007.12.09
Bean 상세화된 설정  (0) 2007.12.08
Posted by 째코

댓글을 달아 주세요

null 값 다루기

Spring/Core 2007. 12. 9. 23:25

<value></value> 요소가 이 처럼 비어 있다면 빈 문자열("")로 인식 합니다.
parent.setName(""); 로 동작 하기 때문에 프로퍼티의 타입이 String이 아니면
java.lang.NumberFormatException 이 떨어 집니다.

빈 문자열이 아닌 null 값을 설정 하고 싶다면 <null /> 요소를 사용하면 됩니다.
parent.setName(null); 로 동작 하기 때문에 참조형 프로퍼티에만 사용 할 수 있습니다.

'Spring > Core' 카테고리의 다른 글

lazy-init 속성  (0) 2007.12.10
간략화 된 설정  (0) 2007.12.10
null 값 다루기  (0) 2007.12.09
Collections 사용하기  (0) 2007.12.09
Bean 상세화된 설정  (0) 2007.12.08
의존성 삽입하기  (0) 2007.12.07
Posted by 째코

댓글을 달아 주세요