스프링은 빈(Bean)을 컨테이너에 등록을 시키고 난 후에 의존 관계를 주입시킨다.
//1. 스프링 컨테이너 초기화
AbstractApplicationContext ctx = new AnnotationConfigApplicationContext(AppCtx.class);
//2. 빈 객체를 컨테이너에서 구해서 사용.
Client client = ctx.getBean(Client.class);
client.send();
//3. 컨테이너 종료.
ctx.close();
더보기
1. AnnotationConfigApplicationContext 의 생성자로 AppCtx(컨텍스트) 객체 생성 &
컨테이너는 설정 클래스에서 정보를 읽어와 빈 객체 생성 , 빈 연결작업.
2. 빈 객체를 구해서 사용
3. 컨테이너 소멸. AbstractApplicationContext에 있는 close 사용.
더보기
스프링 컨테이너 생성 → 빈 생성 , 의존 주입 , 초기화( InitializingBean )
→ 빈 객체 사용 → 종료전 콜백(DisposableBean) 스프링 종료
초기화와 소멸 전 콜백 함수는 어디서 써야 될까
대표적으로 DBCP (데이터베이스 커넥션 풀) 와 채팅에서 초기화와 소멸과정이 필요하다.
컨테이너를 이용하는 동안 연결을 생성하고 , 종료시 연결을 끊어야하기 때문이고,
채팅은 사용자가 서버와 연결을 생성하고 종료할 때 연결을 끊어야한다.
1. 초기화와 소멸 메서드를 상속
public class Client implements InitializingBean, DisposableBean {
private String host;
public void setHost(String host) {
this.host = host;
}
@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() 실행");
}
}
2. 직접 생성하고 싶을 때
//AppCtx.java
@Configuration
public class AppCtx {
@Bean
@Scope("prototype")
public Client client() {
Client client = new Client();
client.setHost("host");
return client;
}
//Bean 어노테이션에 initMethod 와 destroyMethod를 추가하고.
//실행할 메서드의 이름을 적거나 Cilent.java의 Bean에 직접 추가.
@Bean(initMethod = "connect", destroyMethod = "close")
public Client client() {
Client client = new Client2();
client.setHost("host");
return client;
}
}
// Client.java
public class Client {
private String host;
public void setHost(String host) {
this.host = host;
}
public void connect() {
System.out.println("Client2.connect() 실행");
}
public void send() {
System.out.println("Client2.send() to " + host);
}
public void close() {
System.out.println("Client2.close() 실행");
}
}
빈 객체의 생성과 관리 범위
1. 빈 객체의 생성
스프링 컨테이너는 등록한 빈의 객체를 한개만 만든다고 했다.
이걸 싱글톤이라고 했는데 ,
%프로토 타입 %
2. 관리 범위 ( @Scope( "범위" ) )
사용 빈도 낮음.
빈 객체를 여러개 생성해야 될 때는 @Bean 어노테이션과 함께 @Scopre("prototype") 을 작성하면
객체를 여러개 생성 할 수 있다. 정도만 알고 넘어가기.
'스터디 발표 내용' 카테고리의 다른 글
14. MVC 날짜 값 변환 , @PathVariable , Exception 처리 (0) | 2021.11.28 |
---|---|
11. 요청 매핑 , 커맨드 객체 , 리다이렉트 , 폼 태그 , 모델 (0) | 2021.11.21 |
9 Spring MVC 시작하기 (0) | 2021.11.14 |
7 . 스프링의 핵심 기술 !! - AOP 프로그래밍 (0) | 2021.11.14 |
스프링 DI (0) | 2021.11.07 |