어떤 @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 메소드가 실행된다~
출처: http://marobiana.tistory.com/105 [Take Action]
'Web Programming > java-jsp' 카테고리의 다른 글
java 예외 try catch finally (0) | 2018.08.29 |
---|---|
JAVA Method 클래스 (0) | 2018.08.29 |
[자바][Java] DecimalFormat 클래스 (0) | 2018.08.28 |
JSONP를 이용하여 Cross Domain 해결 (0) | 2015.12.29 |
도움이 되는 사이트들 (0) | 2015.10.21 |