Spring @Bean с методом @Lookup

1

Я реализовал компонент Spring, используя аннотацию @Lookup. (Эта тема была полезна: как использовать аннотацию весны @Lookup?)

Впоследствии я заметил странное поведение, которое я не уверен в дизайне или моем собственном недоразумении. Spring будет реализовывать метод @Lookup в компоненте ComponentScan-ed, аннотированном с @Service, @Component и т.д., Но не будет реализовывать такой метод в @Bean, определенном в классе @Configuration (Application.java).

Это не большая проблема, поскольку я могу удалить определение @Bean из конфигурации и вместо этого аннотировать свой класс напрямую; но мне интересно, где-то документировано это поведение, или я неправильно его реализую?

@Bean
public Service getService() {
    // ServiceImpl has a @Lookup method,
    // but Spring does not implement it unless the class itself is annotated.
    return new ServiceImpl();
}
Теги:
spring
annotations
spring-annotations

1 ответ

2
Лучший ответ

Так как вы вызываете new себя, что экземпляр не создан весной и поэтому ни одна из весенних аннотаций не будет обработан (включая @Lookup). Как вы заметили, создавая класс @Component все работает так, как ожидалось, потому что Spring запускает его, когда вы @Autowire его в другой класс.

В вашем примере вы все равно можете @Autowire bean, который вы создали, но вы говорите Spring "эй, используйте эту вещь, которую я сделал как фасоль", вместо того, чтобы сама создать экземпляр Spring.

Это не специально @Lookup для @Lookup потому что это всего лишь часть того, как работает контейнер Spring IoC. Каждый раз, когда вы используете new вы сами по себе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню