使用Spring和AspectJ可配置与组件

Dra*_*Fax 11 aop spring annotations configurable spring-aop

使用AspectJ时,为什么要在@Configurable上使用@Component.

我有@Transactional支持的Spring和AspectJ设置,自我调用的方面以及注入JPA实体.这非常有效.

我正在将@Component用于大多数需要注入的类,因此要么将它们注入到它们的依赖项中.或者,当我不能,注入ApplicationContext然后使用getBean()作为最后的手段.我只为需要注入的JPA实体(Hibernate)保留@Configurable.我也开始使用@Configurable进行jUnit测试,使编写测试变得容易.这也很有效.

但我很好奇.如果AspectJ现在使用@Configurable注释自动注入(bean化)任何东西,无论它是如何构造的; getBean(),new(),@ Autowired.为什么我不能只为我的所有bean切换到使用@Configurable?然后我可以完全取消应用程序上下文和getBean(),只需要new()我无法注入的任何类.

我意识到我没有提到XML bean配置.我并不回避这一点,但这个项目并不需要任何.我只是构造函数或setter在测试时注入依赖项.很容易.

ska*_*man 12

@Component是一个Spring标记接口,可以在自动检测bean时提供Spring线索.

@Configurable是AOP加载时编织东西使用的标记.

这两者并没有太多关系.


Dan*_*dio 7

@Component适用于将由Spring本身实例化的@Configurable类,而适用于将由您自己的代码实例化的类,或者由其他框架实例化的实例 - 例如,由servlet容器通过Hibernate或Servlet实例化.


Ily*_*din 1

您不应该总是使用的原因之一@Configurable是它会增加大量开销:应用程序启动通常需要更长的时间,并且创建新实例会变得更慢。

因为@Component你根本不需要它,因为通常所有实例都是由 Spring 管理的。