2011-09-08 7 views
2

ApplicationContextAware 인터페이스를 구현하는 것보다 J6SE에서 스프링 (스프링 3.0) 애플리케이션 컨텍스트를 얻는 다른 방법이 있습니까?스프링 애플리케이션 컨텍스트

죄송합니다. 내 질문을 개선해야합니다. 내 J6SE 응용 프로그램에서 응용 프로그램 컨텍스트를 실행하고 일부 클래스에서 필요합니다.

답변

2

질문을 읽은 후에 ApplicationContextAware에 대한 대안을 찾고 있지만 ApplicationContext를 사용하는 많은 클래스의 목표를 갖고 있지만이 모든 클래스의 인터페이스 구현을 피하고 싶습니다. 이 방법은 여전히 ​​ApplicationContextAware를 사용하지만 재사용을 위해 단일 클래스로 캡슐화합니다.

일반적으로 응용 프로그램 시작시 web.xml의 ContextLoaderListener를 통해 구성을로드합니다. 이 문제가 발생하면 "MyApplicationContext"를 contextApplicationContextProvider로 설정합니다. 당신이 이미 제안

<bean id="contextApplicationContextProvider" class="pkg.MyApplicationContext"></bean> 

클래스는 ApplicationContextAware를 구현해야합니다 : 여기

public class MyApplicationContext implements ApplicationContextAware { 

    private static ApplicationContext appContext; 

    /* (non-Javadoc) 
    * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext) 
    */ 
    @Override 
    public void setApplicationContext(ApplicationContext globalAppContext) 
     throws BeansException { 

     this.appContext = globalAppContext; 

    } 

    public static ApplicationContext getApplicationContext() { 
     return appContext; 
    } 

} 

열쇠는 당신이 지금의 ApplicationContext 객체의 단일 인스턴스에 대한 정적 참조를 가지고있다. Spring을 통해 관리되는 모든 클래스에 대해 MyApplicationContext.getApplicationContext()라는 정적 메서드 호출을 사용하면 간단하게 검색 할 수 있습니다.

+0

예 싱글 톤처럼 구현되어 있습니다. 하지만 열거 형 클래스의 daos를 제공 할 생각이있어, 나는 응용 프로그램을 설정해야합니다. 이 열거 형의 컨텍스트 이 열거 형에서 내 싱글 톤을 사용하는 방법을 좋아하지 않습니다. –

+0

제대로 이해한다면 Enum에 DAO를 주입하고 싶습니다. 열거 형은 본질적으로 정적이기 때문에 Spring IoC가 이러한 bean을 관리 할 수 ​​있다고 생각하지 않으므로 아무 것도 주입 할 수 없습니다. 정적 싱글 톤에서 응용 프로그램 컨텍스트 뷰에 액세스하는 것이이 목표에 도달하는 것을 알고있는 유일한 방법입니다. – jbabuscio

0

CLASSPATH에서로드 할 수 있습니다.

0
new FileSystemXmlApplicationContext(APPLICATION_CONTEXT_FILE); 
0
@Inject 
private ApplicationContext ctx; 

(또는 대신의 @Inject@Autowired). ApplicationContextAware의 특수 효과 대체입니다. 이것은 물론 객체가 스프링 빈일 필요가 있음을 의미합니다.

관련 문제