어떤 @Service 어노테이션을 쓰는 비지니스 로직이 있는 객체에서
나의 경우에는 Map을 초기화 해놓고 싶었다.
그러니까 소스로 예를 들면,
@Service
public class test {
public Map<String, Object> map; // 이거 초기화 세팅을 어디서...?
public void foo() {
map.get("key");
}
}
저 map을 초기화 해놓고 foo() 메소드에서 쓰고싶은데
어떻게 하면 좋을까?
예전에는 bean 설정에서 init-method 설정을 통해 초기화해주는 메소드에서 구현하면 되었다.
아래와 같이 initData 메소드에서 세팅하면 된다.
<bean name="testService" class="com.test.TestService" init-method="initData" />
근데 어노테이션으로 간단히 하려면.
아래와 같이 사용하면 된다.
@Service
public class test {
public Map<String, Object> map;
@Autowired private AaaObject aaaObj;
// 이렇게
@PostConstruct
public void init() {
map = new HashMap<String, Object>();
map.put("aaa", aaaObj);
}
public void foo() {
map.get("key");
}
}
@PostConstruct 어노테이션을 설정해놓은 init 메소드는 WAS가 띄워질 때 실행된다.
저 위에 예제에서 보면, AAAObject는 오토와이어링이 되어있는데,
과연 map에 들어있는 객체는 스프링에서 객체 생성을 해주었을까?
PostConstruct의 메소드를 실행하기전에 오토와이어링으로 인해서 객체가 잘 생성 되었는가?
아니면 오토와이어링이 되기 전에 PostConstruct가 실행되었는가..
정답은 '잘 생성이 되어있다.'
autowired가 먼저 된 후 init 메소드가 실행된다~
'개발 > Spring' 카테고리의 다른 글
Springframework, Ajax에서 한글이 물음표로 나오는 현상 (25) | 2015.04.03 |
---|---|
[에러] type parameters of T cannot be determined;,.,, (1) | 2014.11.06 |
[Spring MVC + Maven] Project 생성하기 (3) | 2013.09.20 |
RestTemplate의 HttpMessageConverter 에러 (0) | 2013.06.12 |
Custom annotation 만들기 (Spirng AOP 이용) (0) | 2013.04.09 |