[SPRING] Spring 관리 컨텍스트 외부의 클래스에 bean 삽입
SPRINGSpring 관리 컨텍스트 외부의 클래스에 bean 삽입
나는 내 회사 제품 중 하나의 최종 사용자입니다. Spring과의 통합에는 그다지 적합하지 않지만 컨텍스트에 대한 핸들을 얻고 필요한 bean을 이름으로 검색 할 수 있습니다. 그러나, 비록 클래스가 Spring 자체에 의해 관리되지는 않지만,이 클래스에 bean을 삽입 할 수 있는지를 알고 싶습니다.
설명 : 일부 클래스 MyClass의 라이프 사이클을 관리하는 동일한 응용 프로그램은 Spring 컨텍스트의 수명 주기도 관리합니다. Spring은 MyClass의 인스턴스에 대한 지식이 없으며 컨텍스트에 인스턴스를 제공하는 방법을 원하지만 컨텍스트 자체에서는 인스턴스를 만들 수 없습니다.
해결법
-
==============================
1.당신은 이것을 할 수 있습니다 :
당신은 이것을 할 수 있습니다 :
ApplicationContext ctx = ... YourClass someBeanNotCreatedBySpring = ... ctx.getAutowireCapableBeanFactory().autowireBeanProperties( someBeanNotCreatedBySpring, AutowireCapableBeanFactory.AUTOWIRE_AUTODETECT, true);
YourClass 내에서 @Autowired 등을 사용하여 주입 할 필드 등을 지정할 수 있습니다.
-
==============================
2.bean을 Spring으로 가져 오는 데있어 Spring을 외부로 가져 오는 한 가지 방법은 @Configuration Bean으로 표시된 helper 클래스를 사용하는 것입니다. @ Bean으로 표시되는 메소드는 실제로 인스턴스를 만들고 Spring을 통해 다시 가져 오는 메소드입니다. 속성 삽입 및 프록시 생성).
bean을 Spring으로 가져 오는 데있어 Spring을 외부로 가져 오는 한 가지 방법은 @Configuration Bean으로 표시된 helper 클래스를 사용하는 것입니다. @ Bean으로 표시되는 메소드는 실제로 인스턴스를 만들고 Spring을 통해 다시 가져 오는 메소드입니다. 속성 삽입 및 프록시 생성).
나는 당신이 어떤 범위를 필요로하는지 잘 모르겠습니다. 프로토 타입을 사용하면 각 장소에서 신선한 콩을 얻을 수 있습니다.
@Configuration public class FooBarMaker { @Bean(autowire = Autowire.BY_TYPE) @Scope("prototype") public FooBar makeAFooBar() { // You probably need to do some more work in here, I imagine return new FooBar(); } }
@Configuration 빈으로 제조에 필요한 특성을 주입 할 수 있습니다. (인스턴스화 할 클래스의 이름이 런타임에 정의되는 인터페이스 인스턴스를 만들 때이 메서드를 사용합니다.)
-
==============================
3.당신이 다음의 종속성 체인을 가지고 있다고 가정 해보십시오 :
당신이 다음의 종속성 체인을 가지고 있다고 가정 해보십시오 :
A → B → C → x → y → Z
A, B, C는 스프링 관리 Bean (스프링 프레임 워크에 의해 생성되고 관리 됨) x, y는 봄 지원없이 애플리케이션에 의해 생성 된 정말 간단한 POJO입니다.
이제 당신이 원한다면 Spring을 사용하는 Z에 대한 참조를 얻을 것이다. Spring에 'handle'을 가져야 할 필요가있다. ApplicationContext
한 가지 방법은 ApplicationContextAware 인터페이스를 구현하는 것입니다. 이 경우 A, B 또는 C 중 하나가이 인터페이스를 구현하고 정적 멤버에 applicationContext 참조를 저장하도록 제안합니다.
클래스 C를 예로 들어 보겠습니다.
class C implmenets ApplicationContextAware{ public static ApplicationContex ac; void setApplicationContext(ApplicationContext applicationContext) { ac = applicationContext; } ............. }
지금, 클래스 y에서 당신은 있어야합니다 :
(Z)(C.ac.getBean("classZ")).doSomething()
HTH - 요나탄
-
==============================
4.끝없이 이어지는 autowire 콤보를 찾아 봄 콩을 pojo applicationcontextaware beanaware 등에 넣으십시오. 여기에서 다시 동그라미를 치지 만,이 완벽한 해결책은 제게는 충분합니다.
끝없이 이어지는 autowire 콤보를 찾아 봄 콩을 pojo applicationcontextaware beanaware 등에 넣으십시오. 여기에서 다시 동그라미를 치지 만,이 완벽한 해결책은 제게는 충분합니다.
이것은이 IMO의 훨씬 나은 구현 / 튜토리얼입니다 : 나는 그것이 모두가 마침내 나를 도왔던 것처럼 그것이 도울 수 있기를 바란다.
스프링 컨텍스트 외부에서 스프링 빈 액세스
-
==============================
5.이를 수행하는 또 다른 방법은 AspectJ를 사용하는 것이다. 이것은 new 연산자로 생성 된 관리되지 않는 객체에 스프링 빈을 주입 할 때 권장되는 방법입니다. 자세한 내용은 다음을 참조하십시오.
이를 수행하는 또 다른 방법은 AspectJ를 사용하는 것이다. 이것은 new 연산자로 생성 된 관리되지 않는 객체에 스프링 빈을 주입 할 때 권장되는 방법입니다. 자세한 내용은 다음을 참조하십시오.
http://www.javacodegeeks.com/2011/02/domain-driven-design-spring-aspectj.html
-
==============================
6.Spring의 가장 오래된 버젼에는 bean factory http://jira.springframework.org/browse/SPR-4672에 thread-safe 문제가 있음을주의하라.
Spring의 가장 오래된 버젼에는 bean factory http://jira.springframework.org/browse/SPR-4672에 thread-safe 문제가 있음을주의하라.
-
==============================
7.Spring 컨텍스트 외부에 개체를 만들고 해당 개체를 Spring 컨텍스트에있는 다른 Bean에 삽입 할 수있게하려면이 문서의 단계를 수행하면됩니다.
Spring 컨텍스트 외부에 개체를 만들고 해당 개체를 Spring 컨텍스트에있는 다른 Bean에 삽입 할 수있게하려면이 문서의 단계를 수행하면됩니다.
기본적으로 부모 응용 프로그램 컨텍스트를 만들고이 부모 컨텍스트에 외부 개체를 단일 개체로 푸시합니다. 그런 다음 상위 응용 프로그램 컨텍스트 (예 : xml 파일)를 상위 응용 프로그램 컨텍스트와 함께 부모로 만듭니다.
Object externalObject = ... GenericApplicationContext parent = new StaticApplicationContext(); parent.getBeanFactory().registerSingleton( "externalObject", externalObject ); parent.refresh(); ApplicationContext appContext = new ClassPathXmlApplicationContext( ... , parent);
from https://stackoverflow.com/questions/310271/injecting-beans-into-a-class-outside-the-spring-managed-context by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 부트 애플리케이션의 환경 특정 application.properties 파일 (0) | 2018.12.11 |
---|---|
[SPRING] Spring Boot에서 프로그래밍 방식으로 DataSource 설정하기 (0) | 2018.12.11 |
[SPRING] Jackson JSON을 사용하여 Spring MVC에서 JSON 구문 분석하기 (0) | 2018.12.11 |
[SPRING] @Cacheable에 TTL을 설정할 수 있습니까? (0) | 2018.12.11 |
[SPRING] Spring Quartz 작업 실행이 겹치지 않도록한다. (0) | 2018.12.11 |