개발/Spring
[Spring] Service 객체에서 초기화 하는 init 메소드 만들기
신매력
2014. 5. 15. 15:16
어떤 @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 메소드가 실행된다~