ApplicationContextAware
인터페이스를 구현하는 것보다 J6SE에서 스프링 (스프링 3.0) 애플리케이션 컨텍스트를 얻는 다른 방법이 있습니까?스프링 애플리케이션 컨텍스트
죄송합니다. 내 질문을 개선해야합니다. 내 J6SE 응용 프로그램에서 응용 프로그램 컨텍스트를 실행하고 일부 클래스에서 필요합니다.
ApplicationContextAware
인터페이스를 구현하는 것보다 J6SE에서 스프링 (스프링 3.0) 애플리케이션 컨텍스트를 얻는 다른 방법이 있습니까?스프링 애플리케이션 컨텍스트
죄송합니다. 내 질문을 개선해야합니다. 내 J6SE 응용 프로그램에서 응용 프로그램 컨텍스트를 실행하고 일부 클래스에서 필요합니다.
질문을 읽은 후에 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()라는 정적 메서드 호출을 사용하면 간단하게 검색 할 수 있습니다.
CLASSPATH에서로드 할 수 있습니다.
new FileSystemXmlApplicationContext(APPLICATION_CONTEXT_FILE);
@Inject
private ApplicationContext ctx;
(또는 대신의 @Inject
@Autowired
). ApplicationContextAware
의 특수 효과 대체입니다. 이것은 물론 객체가 스프링 빈일 필요가 있음을 의미합니다.
예 싱글 톤처럼 구현되어 있습니다. 하지만 열거 형 클래스의 daos를 제공 할 생각이있어, 나는 응용 프로그램을 설정해야합니다. 이 열거 형의 컨텍스트 이 열거 형에서 내 싱글 톤을 사용하는 방법을 좋아하지 않습니다. –
제대로 이해한다면 Enum에 DAO를 주입하고 싶습니다. 열거 형은 본질적으로 정적이기 때문에 Spring IoC가 이러한 bean을 관리 할 수 있다고 생각하지 않으므로 아무 것도 주입 할 수 없습니다. 정적 싱글 톤에서 응용 프로그램 컨텍스트 뷰에 액세스하는 것이이 목표에 도달하는 것을 알고있는 유일한 방법입니다. – jbabuscio