개발/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 메소드가 실행된다~