복붙노트

[SPRING] 구성 요소 검사로 발견 된 Bean을 재정의하는 방법이 있습니까?

SPRING

구성 요소 검사로 발견 된 Bean을 재정의하는 방법이 있습니까?

나는 구성 요소 스캔에 의해 fooBean을 직접 제공하고 barBean을 제공하는 java 구성 클래스를 가지고있다.

@Configuration
@ComponentScan(basePackages = { "com.blah" })
public class Config {

    @Bean
    public FooBean fooBean {
        return new FooBean();
    }
}

그리고 나는 그것을 테스트 케이스에서 재사용하고 싶다. 그리고 나는 콩을 mock으로 대체 할 필요가있다.

@Configuration
@Import(Config.class)
public class TestConfig {

    @Bean
    public FooBean fooBean {
        return new FooBeanMock();
    }

    @Bean
    public BarBean barBean {
        return new BarBeanMock();
    }
}

(여기서는 Config를 재사용하는 것이별로 의미가 없지만, 실생활에서 나는 1000 Beans를 가지고 있으며, 단지 몇 가지 조롱 할 필요가 있습니다)

여기서 fooBean은 오버라이드되지만 barBean은 오버라이드되지 않습니다.

Skipping loading bean definition for %s: a definition for bean " + "'%s' already exists. This is likely due to an override in XML.

또한 공식적인 문제가 있습니다. https://jira.springsource.org/browse/SPR-9682

누군가가 컴포넌트 스캔으로 발견 된 bean을 오버라이드하기위한 해결 방법을 알고 있습니까?

빈은 레거시 코드이며 수정할 수 없으며 종속성에 대한 설정자 (개인 속성 + @Resource)가 없다는 것을 고려해야합니다.

해결법

  1. ==============================

    1.불필요한 빈을 건너 뛰십시오.

    불필요한 빈을 건너 뛰십시오.

    @ComponentScan(basePackages = { "com.blah" }, excludeFilters = @Filter({UnnecessaryBean1.class, UnnecessaryBean2.class}))
    
  2. ==============================

    2.예, 구성 요소 검사로 발견 된 Bean을 대체 할 수 있습니다. 나는 이것을 테스트 케이스에서한다. XML 구성을 사용하지만 자바 구성이 매우 비슷하다고 생각합니다.

    예, 구성 요소 검사로 발견 된 Bean을 대체 할 수 있습니다. 나는 이것을 테스트 케이스에서한다. XML 구성을 사용하지만 자바 구성이 매우 비슷하다고 생각합니다.

    spring.xml :

     <context:component-scan base-package="cz.backend"/>
    

    MyBeanImpl.java

    @Component("myBean")
    public class MyBeanImpl implements MyBean {
       //Something
    }
    

    테스트 폴더에서 나는 :

    spring-test.xml :

    <import resource="classpath:/spring.xml"/>
    <bean id="myBean" class="cz.backend.MyBeanTestMock"/>
    

    MyBeanTestMock.java:

    public class MyBeanTestMock implements MyBean {
        //Something
    }
    

    대체 bean의 이름은 동일해야합니다.

  3. from https://stackoverflow.com/questions/15972824/is-there-any-way-to-override-a-bean-discovered-by-component-scan by cc-by-sa and MIT license