스프링 빈의 생성자에 대한 어노테이션이다.
1. @PostConstruct 란?
의존성 주입이 이루어진 후 초기화를 수행하는 메서드에 적용을 한다.
즉, 어떤 스프링 빈이 자신의 생성자로 초기화 되기 전에
실행되어야 하는 메서드에 적용되는 어노테이션이다.
이 메서드는 다른 리소스에서 호출되지 않는다해도 수행이된다.
WAS 가 띄워질 때 @PostConstruct로 설정된 메소드가 실행된다.
예를 들어보자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public class Foo {
@Inject
Logger LOG;
@PostConstruct
public void fooInit(){
LOG.info("This will be printed; LOG has already been injected");
}
public Foo() {
LOG.info("This will NOT be printed, LOG is still null");
// NullPointerException will be thrown here
}
}
|
cs |
@Inject 는 java에서 지원하는 어노테이션으로 특정 프레임워크에 종속되지 않는다.
@Inject 사용을 위해서 javax 라이브러리 의존성 추가를 해야한다.
@Inject는 @Autowired 처럼 주입하려는 객체의 타입이 일치하는 객체를 자동 주입한다.
@Autowired와 마찬가지로 필드, setter에 사용할 경우 기본생성자가 정의되어야 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
class Foo2 {
@Autowired
Bar bar;
Foo() {
System.out.println(bar); // null
System.out.println("bar does not injected");
}
@PostConstruct
public void barInit() {
System.out.println(bar); // package.Bar@...
System.out.println("bar is injected.");
}
}
|
cs |
2. 11버전에서
11버전에서는 못쓴다. 9버전 이후로 deprecate 되었기 때문
만약 사용하려면 javax.annotation-api 종속성을 추가해야된다.
Spring의 경우 InitailizingBean 과 DisposableBean 인터페이스를 구현해서
@PostConstruct , @PreDestroy를 대체할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
@Component
public class TestComponent implements InitializingBean, DisposableBean{
@Override public void afterPropertiesSet() throws Exception {
// @PostConstruct 대체
}
@Override public void destroy() throws Exception {
// @PreDestroy 대체
}
}
출처: https://devbible.tistory.com/461
|
cs |
'웹 > spring boot' 카테고리의 다른 글
에러페이지 처리 (0) | 2021.06.11 |
---|---|
view 부분 구현해보기 (0) | 2021.03.25 |