저는 스프링을 처음 사용합니다. autowired가 Spring 문맥에 존재하지 않는 보통 자바 빈에 사용될 대안이 있는가?@ 스프링 컨텍스트가 아닌 bean에 실려 있음
답변
당신은 어떤 AspectJ
마법 봄 @Configurable를 사용하여 수행 할 수 있습니다. 당신은 자세한 설명이 필요한 경우
, 여기에 link입니다. 여기
그리고
는 달성 할 수있는 방법에 대한 간략한 개요입니다.@Component
public class InjectedClass {
// ...
}
그런 다음, 당신은 당신이 인스턴스화 할 것인지, 관리 - 봄 용기되지 않은 클래스가 :
먼저 당신은 당신이 어딘가에 주입하려는 일부 콩이있다. autowiring이이 클래스로 작업하기를 원합니다. 그것을 @Configurable으로 표시하십시오.
@Configurable
public class NonContainerManagedClass {
@Autowired
private InjectedClass injected;
// ...
}
지금 당신은 당신이 일을 autowiring에이 관리 비 컨테이너를 원하는 봄을 말할 필요가있다. 그래서 당신은 당신의 봄 구성에 다음을 넣는다.
<context:load-time-weaver />
<context:spring-configured />
이제 이런 종류의 일이 당신의 @Configurable 클래스의 바이트 코드의 수정을 필요로하기 때문이다. 그래서 Tomcat에게 다른 classloader
을 사용하라고 명령합니다. 애플리케이션의 META-INF
디렉터리에 context.xml
을 만들고 거기에 다음을 입력하면됩니다.
<Context path="/youWebAppName">
<Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"
useSystemClassLoaderAsParent="false"/>
</Context>
이제, Tomcat은 그 classloader
을 찾을 필요가있다. 당신은 넣어을 확인 할 수 있습니다 봄의 spring-tomcat-weaver.jar
톰캣 설치의 lib
디렉토리에 (아마도 org.springframework.instrument.tomcat-<version>.jar
이름), 짜잔, AspectJ의 마법이 작동을 시작합니다. @Configurable 주석이있는 클래스의 경우 @Autowired
종속성이 자동으로 해결됩니다. 인스턴스가 스프링 컨테이너 외부에서 생성 된 경우에도 마찬가지입니다.
이것은 아마도 깨끗한 방식으로, 봄과 함께 그 일을 할 수있는 유일한 방법입니다. classpath
에 적절한 종속성이 있는지 확인하십시오.
또 다른 방법은 전체 AspectJ 기능과 모든 생성자의 주위에 사용자 정의 측면을 제공하고 의존성 주입 자신을 처리를 사용하는 것입니다.
- 1. 어떤 스프링 - 콩 및 스프링 - 컨텍스트가 사용됩니까?
- 2. JsonSerializers를 사용할 때 직렬화 컨텍스트가 있음
- 3. 장고 테스트 클라이언트 응답에 빈 컨텍스트가 있음
- 4. opencl의 동일한 장치에 다중 컨텍스트가 있음
- 5. servlet이나 bean이 아닌 클래스에서 JSF bean에 액세스하십시오.
- 6. 스프링 컨텍스트가 초기화 된 후 웹 서버로드하기
- 7. 각 통합 테스트 후 스프링 컨텍스트가 더럽습니다.
- 8. 오류 : 개체 컨텍스트가 아닌 경우 $ this 사용
- 9. 태그 컨텍스트가 아닌 URL의 JSTL 객체
- 10. HTML5 캔버스 컨텍스트가 아닌 이미지 만 회전
- 11. 스프링 MVC에 여러 폼이 있음
- 12. 0이 아닌 값이있는 Gradle이 있음
- 13. spring-mvc bean에 저장된 파일
- 14. Spring bean에 파일 리소스 주입하기
- 15. 값 bean에 정보 저장
- 16. ThreadPoolTaskExecutor 테스트 중에 스프링 컨텍스트가 살아 있는지 확인하는 좋은 방법
- 17. Tomcat Eclipse에서 디버깅하는 동안 변경 될 때마다 스프링 컨텍스트가 다시로드됩니다.
- 18. 서블릿에 액세스 할 때마다 스프링 애플리케이션 컨텍스트가 다시로드되는 이유는 무엇입니까?
- 19. 스프링 MVC : 애플리케이션 컨텍스트가 두 번 실행 중임
- 20. 컨텍스트가 존재하지 않습니다.
- 21. liferay 포틀릿 스프링 MVC 형식이 비어 있음
- 22. 스프링 보안 세션 레지스트리 비어 있음
- 23. webapp에서 실제 컨텍스트를 가리키는 스프링 컨텍스트 변수가 있음
- 24. webapp 컨텍스트가 아닌 Tomcat 루트에서 시작 페이지를 얻는 방법?
- 25. 왜 오류가 발생합니까 : "객체 컨텍스트가 아닌 경우 $ this 사용 .........."
- 26. 데이터 컨텍스트가 아닌 경우 창에 바인딩 모델 속성
- 27. 오브젝트 컨텍스트가 아닌 경우 $ this 사용 ... 스택 문제?
- 28. 객체 컨텍스트가 아닌 경우 $ this 사용 - Laravel 4 PHP 5.4.12
- 29. 스크립트 호출 쉘 명령은 웹 컨텍스트가 아닌 CLI에서 작동합니다.
- 30. 치명적인 오류 : 객체 컨텍스트가 아닌 경우 $ this 사용
그래서 스프링 관리 빈을 관리되지 않는 POJO에 주입하고 싶습니까? – WeMakeSoftware
spring-container가 아니라 인스턴스화하는 bean에 대해 autowiring이 작동하도록 하시겠습니까? –
@Funtik, 네, 맞습니다. –