2009-05-20 139 views
8

当使用AspectJ时,为什么使用@Component over @Configurable。可配置与组件与Spring和AspectJ

我已经为@Transactional支持,自我调用的方面以及注入到JPA实体的Spring和AspectJ设置。这很好。

我对大多数需要注入的类使用@Component,因此要么将它们注入到它们的依赖项中。或者,当我不能时,注入ApplicationContext,然后使用getBean()作为最后的手段。而且,我仅为需要注入的JPA实体(Hibernate)保留@Configurable。我还开始使用@Configurable进行jUnit测试,以便简化写作测试。这也很好。

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

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

回答

1

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

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

12

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

@Configurable是由AOP加载时织造材料使用的标记。

这两者并没有太大的关系。例如,

6

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