使用Spring和AspectJ可配置与组件

时间:2009-05-20 04:58:32

标签: spring annotations aop spring-aop configurable

使用AspectJ时,为什么要使用@Component而不是@Configurable。

我有@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在测试时注入依赖项。很容易。

3 个答案:

答案 0 :(得分:12)

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

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

这两者并没有太多关系。

答案 1 :(得分:6)

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

答案 2 :(得分:1)

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

对于@Component,您根本不需要它,因为通常所有实例都由Spring管理。