Должны ли аннотации Spring работать с определенными классами @Bean в @configuration? - PullRequest
0 голосов
/ 16 января 2020

Итак, читая документацию @Lookup, она говорит, что она не будет работать с фабричными методами в классах @configuration, и я читал, что весенние аннотации не будут обрабатываться всякий раз, когда мы используем новую реализацию. Поэтому я попытался, и аннотации @autowired работают на @Bean определенных экземплярах:

@Configuration
@ComponentScan("autowired_qualifier_resource")
public class Application {

    @Bean(name="firstBean")
    @Qualifier("qualifierBean")
    TestBeanInterface myBean(){
        return new TestBean1();
    }


    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(Application.class);
        System.out.println(context.getBean("firstBean"));

    }
}



    public class TestBean1 implements TestBeanInterface {
    private BeanInterface bean;

    @Autowired
    public TestBean1(){

        System.out.println("TestBean1");
    }

    @Autowired
    public void setBean( BeanInterface bean){
        System.out.println("SetBean :" + bean);
        this.bean = bean;
    }

}

Вызывается метод setBean, который выдает ошибку наличия более одного объекта для одного типа. Так почему же метод поиска не работает на @Bean определенных классах, когда другие аннотации работают?

1 Ответ

1 голос
/ 17 января 2020

От документы

Такие методы поиска могут иметь реализации по умолчанию (заглушки), которые просто заменяются контейнером, или они могут быть объявлены как абстрактные - для контейнера заполнить их во время выполнения. В обоих случаях контейнер будет генерировать подклассы времени выполнения класса, содержащего метод, через CGLIB, поэтому такие методы поиска могут работать только с bean-компонентами, которые контейнер создает с помощью обычных конструкторов: т.е. методы поиска не могут быть заменены на bean-компонентах, возвращаемых из фабричные методы, где мы не можем динамически предоставить подкласс для них .

Надеюсь, это говорит само за себя.

...