주어진 다음의 클래스 :누락 된 종속성의 프록시를 자동으로 만들고 주입하는 방법?
package com.acme;
public class Foo {
private Bar bar;
public void setBar(Bar newBar) {
this.bar = newBar;
}
}
@AcmeService
public interface Bar {}
과의 Spring 설정 파일 :
<beans>
<bean id="foo" class="com.acme.Foo">
<property name="bar" ref="bar" />
</bean>
</beans>
봄의 구성 단계 실행이 가능하다는 다음과 같은 작업을 수행하는 경우?
- 캐치 누락 된 종속 예외 (또는있을 것입니다 감지) 콩 "foo는"누락 된 의존성 "바"형 com.acme.Bar
- 공지의 것을
- 발견 그 막대기는 @AcmeService이고, 그래서 우리는 그것을 처리 할 것입니다. 그렇지 않으면 오류가 치명적일 수 있습니다.
- com.acme.Bar 형식의 프록시 생성
- 바 프록시를 Foo에 주입하여 명시 적으로 작성한 것처럼 Bar의 메소드 호출에 Spring AOP를 알릴 수 있습니다. Spring 설정 파일의 Bar 프록시와 Foo 빈에 프록시를 삽입한다.
나는 처음에 설명서를 읽으면 내가 원하는 것을 정확하게 수행의 확실한 방법이 표시되지 않았지만,이를 구현하기위한 수단으로 에 BeanPostProcessor 및 BeanFactoryPostProcessor를 그려졌다.
당신이 궁금해하는 경우, 기본 유스 케이스는 내가 원하는 것입니다에 :
- 는 @의 프록시를 생성하는 하나의 컨텍스트 파일 내 서비스 레이어 빈 정의 모든 Spring 컨텍스트 파일을 교체 AcmeService 빈 인터페이스.
- 대신 서비스 계층 Bean 프록시의 인터페이스 조롱 (mock)에서 이러한 프록시에 대한 호출을 호출하도록 권고합니다. (키커는 원격 시스템에 의해 런타임에 모의 객체가 정의되고 통합 테스트 목적으로이 애플리케이션에 업로드된다는 것입니다. 정기적 인 단위 테스트에서는 필요에 따라 모의 객체를 만들고 주입하는 것이 더 정숙합니다.
나는 "동적으로 생성하는 프록시"비트를 제외한 모든 기능을 가지고 있습니다. 현재는 컨텍스트 파일에 정의 된 서비스 인터페이스의 빈 구현만으로 주입 및 권고를받을 수 있습니다. 그러나 빈 인터페이스 클래스가 생성되어 체크인되지는 않을 것입니다. 그리고 마지막으로 이들을 생성해야한다고 가정합니다. null 종속성에 대한 호출 시도를 조언하는 방법을 모르기 때문에 프록시.
도움 주셔서 감사합니다. 언뜻보기에 AutowiredAnnotationBeanPostProcessor를 서브 클래스 화하고 findAutowireCandidates의 사용자 정의 구현을 제공하면 필자가 원하는만큼 근접 할 수 있습니다. 결실을 증명하면 더 조사하고 답을 수락합니다! –
내가 원했던 것은 실제로 가능하지 않았지만, 다행스럽게도 내 문제에 대한 다른 접근 방식이 어쨌든이를 수행 할 필요성을 없앴습니다. –