2016-07-08 3 views
0

내 Java 코드에서 new()을 호출하여 생성되는 인스턴스에서 일반 DAO 서비스를 Autowire 할 수 있기를 원합니다. @configurable이 This spring doc을 살펴 보는 올바른 방법이라는 것을 이해했습니다. 그래서 여기@Configurable 클래스에서 @Autowired가 작동하지 않음

내가, 주요 설정 클래스는 그 모양이

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = { xxx.MainConfig.class }) 
@ActiveProfiles({ "database-test", "classpath" }) 
public class DynVdynOperationsImplTest { 

    @Test 
    public void testSend() { 
    underTest = new DynVdynOperationsImpl(); 
    underTest.sendVdyn("0254", null, null); 
    ... } 

처럼 보이는 봄 테스트와 JUnit 테스트에서 사용하려는 내 클래스 코드

@Configurable(dependencyCheck=true) 
public class DynVdynOperationsImpl implements DynVdynOperations { 

    @Autowired 
    private DynVdynInDbDao vdynDao; 

입니다

@Configuration 
@EnableSpringConfigured 
@ComponentScan(basePackages = {xxx }) 
public class MainConfig { 
... 
    @Bean 
    @Scope("prototype") 
    public DynVdynOperations vdynOperations() { 
     return new DynVdynOperationsImpl(); 
    } 

테스트를 실행하면 underdest vdynDao 속성이 자동으로 올바르게 실행되지 않고 남아 있습니다. 없는. this similar question을 보면, 나의 설정에서 AspectJ에 관한 것들이 누락되었을 수있다.

작동시키기위한 간단한 방법이 있습니까? 즉 내 코드에 물체를 만들 때 나 자신을 삽입하는 것에 비해 플라이를 죽이기 위해 망치를 사용하는 느낌이 들지 않는 곳? @Service 객체 내 코드에서 직접 스프링 콩 공장을 호출 할 수 있습니까?

답변

0

여기에 가장 쉽고 간단한 방법이있는 것 같습니다. AspectJ 사용의 복잡성을 피한다.

구성 클래스가 정상입니다. @Scope("prototype")으로 bean을 선언하면 Spring에이 클래스의 bean을 얻으라고 요청할 때마다 새로운 인스턴스가 생성됩니다.

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = { xxx.MainConfig.class }) 
@ActiveProfiles({ "database-test", "classpath" }) 
public class DynVdynOperationsImplTest { 

    @Autowired 
    ApplicationContext context; 

    @Test 
    public void testSend() { 
    underTest = context.getBean(DynVdynOperations.class); 
    underTest.sendVdyn("0254", null, null); 
    ... } 
: 테스트 클래스에서

, 응용 프로그램 컨텍스트를 사용하여 콩을 생산하는 스프링 컨테이너를 물어
0

DynVdynOperationsImpl의 클래스 정의에 @Scope ("프로토 타입")을 넣으십시오.

은 또한 대신 "새로운 DynVdynOperationsImpl", 나는 (즉, "DynVdynOperations을")이 빈의 이름을 필요가 있다고 생각하고 사용 applicationContext.getBean ("DynVdynOperations")을 그것의 새로운 인스턴스를 만들 수 있습니다. getBean을 사용하면 Spring이 찾은 배선을 처리하도록 지시합니다.

관련 문제