2011-04-24 2 views
1

이미 생성 된 객체로 종속성을 초기화하는 방법이 있습니까? 가정하자스프링에서 이미 생성 된 객체를 초기화하십시오.

나는 다음 클래스가 있습니다

class MyPage { 

    @Autowired LogStorage storage; 
    private String applicationId; 
    private Date date; 

    public MyPage(String applicationId, Date date) { 
    this.applicationId = applicationId; 
    this.date = date; 
    } 

    public String render() { 
    Collection<Entry> entries = storage.getEntries(applicationId, date); 
    // render entries into HTML for example 
    } 
} 

내가 두 단계로 객체 생성을 분할 할을. 먼저, 사용자 제공 데이터 (이 예제에서는 applicationIddate)로 객체를 생성하고, 두 번째는 Spring DI 컨테이너 의존성을 가진 객체를 초기화하는 것입니다. 그래서 이미 생성 된 객체를 초기화하는 일종의 작업이 필요합니다. 나는 클라이언트 코드는 다음과 비슷한 모습이 될 것입니다 생각 :

MyPage p = new MyPage(applicationId, date); 
beanFactory.initDependencies(p); 

String html = p.render(); 

클라이언트는 알 수 없습니다 (그리고 내 경우에한다) Page 개체에 필요한 모든 종속, 그래서 명시 적 종속성을 제공 할 수 없습니다. 하지만 BeanFactory 객체에 대한 참조가 있고이 작업을 Spring에 위임 할 수 있습니다. 그것을 할 수있는 방법이 있습니까?

답변

3
applicationContext.getAutowireCapableBeanFactory().autowireBean(p); 

다른 방법을 자동으로 묶어과 autowireBeanProperties

가 단지 빈 속성을 설정하는 것을 명심하십시오, 그래서 인터셉터와 같은 어떤 AOP 물건, 거래 등

관련 문제