티스토리 뷰

어떤 @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 메소드가 실행된다~



댓글
댓글쓰기 폼