2018-8-30 Bean LiftCycle
빈 라이프사이클
스프링컨테이너는 초기화와 종료라는 라이프 사이클을 가진다.
- 컨테이너를 사용한다는 것은 getBean()과 같은 메서드를 이용해서 컨테이너에 보관된 빈객체를 구하는 것이다.
- 컨테이너초기화 : 빈객체의 생성과 의존 객체 주입 및 초기화
- 컨테이너종료 : 빈객체의 소멸
public class Client implements InitializingBean, DisposableBean {
private String host;
public void setHost(String host) {
this.host = host;
System.out.println("Client.setHost 실행");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("Client.afterPropertiesSet() 실행");
}
public void send() {
System.out.println("Client.send() to" + host);
}
@Override
public void destroy() throws Exception {
System.out.println("Client.destroy() 실행");
}
}
//result
Client.setHost 실행
Client.afterPropertiesSet() 실행
Client.send() to서버
Client.destroy() 실행
- 스프링컨테이너는 빈객체의 프포퍼티 설정을 마무리한 뒤에 초기화 메서드를 실행을 한다.
- destory()메서드의 경우 ctx.close()가 없으면 스프링 컨테이너의 종료 과정을 수행하지 않기 때문에, 빈객체의 소멸도 이루어지지 않는다.
객체범위
public class Main {
public static void main(String[] args) {
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:appCtx.xml");
Client client = ctx.getBean("client", Client.class);
Client client2 = ctx.getBean("client", Client.class);
System.out.println("client == client2 : " + client.equals(client2));
ctx.close();
}
}
//result
client == client2 : true
- 한 식별자에 대해 한 개의 객체만 존재하는 빈을 싱글톤(Singleton)라고 한다.
- 빈의 범위를 따로 프로토타입으로 지정을 해서, 빈 객체를 구할 때 마다 매번 새로운 객체를 생성할 수도 있다.
- @Scoe어노테이션이나 bean태그의 scope=”prototype”으로 지정을 하면 매번 새로운 객체를 생성한다.
AOP
Written on August 30, 2018