이 내용은 어디까지나 내가 이해한 내용를 정리한것으로 틀릴 수 있음
기본적인 spring내용은 생략함I.BeanFactory와 ApplicationContext BeanFacotory는 무조건 bean생성시 lazy-init이다
ApplicationContext는 default가 lazy-init false이면 lazy-init true를 줄 수 있다
예제 1-1
DTD
Bean
BeanFactory ApplicationContext Test
결과
II.Spring Container load 순서 1.BeanFactoryPostProcessor
컨테이너가 시작되기전 외부 설정file들과 같은 정보를 읽어올 수 있다
(ex:PropertyPlaceholerConfigurer,ClassEditor 등)
2.BeanFactoryPostProcessor의 posProcessorBeanFactory method호출
3.BeanPostProcessor constructor 호출
4.Bean들load
5.Bean들 DI
6.BeanPostProcessor의 postProcessBeforeInitialization method 호출
7.BeanPostProcessor의 postProcessAfterInitialization method호출
ex 1-2
DTD
BeanFactoryPostProcessor
BeanPostProcessor
Container load
결과
III.Spring 2.5 IOC xml에 bean설정를 할 필요없이 component-scan를 해주면 strerotype으로 선언된것들은
bean이 생성된다
@Autowired,@Required 를 선언시 DI가 bean들에서 일어나는데 xml에 bean설정이나 아님
component-scan할수있게 strerotype를 bean에 설정해주어야 한다
DI에 관련된 annotation은 @Autowired,@Resources등이 있으며 받드시 DI될 bean들이 있어야한다
@Autowired 는 속성설정required false로 하면 DI될 bean이 없더라고 예외가 발생하지 않는다
또한 @Autowired는 DI시 bean의 type으로 찾는데 같은 type이 존재시 예외가 던저진다
이를 방지 하기 위해 primary option를 사용하면 된다 또는 이름(아이디)으로 찾기위한
annotation이 있는데 @Qualifier이다 이는 flied에 만 사용가능하고 method에는 사용 하지 못한다
또한 @Autowired나 @Required등를 사용시 가각의 후처리bean설정이 필요한데
< context:annotation-config / > 만 써주면 생략할 수 있다
또한 DI이 일어날때 가각 setter method가 필요했었는데 이제는 필요치 않다
strerotype
@Component
@Controller
@Service
@Repository등 springframework.org 참조
ex-3 xml설정
ex-4
III그외 scop에 관해 spring bean은 기본적으로 sigleton 으로 생성된다 option으로 scope설정를 변경하능 하다
BeanFactory는 sigleton,prototye2가지만 가능 하지만
ApplicatonContext는 sigleton,prototye,session,globasession,request등이 가능하다
문제는 singleton bean이 request나 session scope등 다른 scope에 존제하는 bean를 물고
있를 때다 이러할때는
처럼
scope-proxy를 설정 해야 한다 그럼 sigleton bean이 자신에게 물려있는 다른 scope를 DI할때
proxy를 만들어 DI하는데 targetClass로 설정하면 DI될 bean의 interface가 존해하지 않아도 된다
이럴경우 CGLIB를 이용하며 Proxy생성한다 interfaces로 하면 bean의 interface가 존재해야만한다
그리고 interfaces로 하면 JDK Dynamic Proxy를 생성한다 되도록 targetClass로 하며 부하를 줄인다
ex -5
이어지는 내용