使用Spring和AspectJ进行可配置的组件
使用AspectJ时,为什么使用@Component over @Configurable。
我已经为@Transactional支持设置了Spring和AspectJ设置,自调用方面以及注入JPA实体。 这很好。
我为大多数需要注入的类使用@Component,因此要么将它们注入到它们的依赖项中。 或者,当我不能时,注入ApplicationContext,然后使用getBean()作为最后的手段。 而且,我仅为需要注入的JPA实体(Hibernate)保留@Configurable。 我还开始使用@Configurable进行jUnit测试,以便简化写作测试。 这也很好。
但我很好奇。 如果AspectJ现在使用@Configurable注解自动注入(beanization)任何东西,不管它是如何构造的; getBean(),new(),@Autowired。 为什么我不能只为所有的bean使用@Configurable? 然后,我可以完全取消应用程序上下文和getBean(),只是new()我不能注入的任何类。
我意识到我没有提到XML bean配置。 我不回避,但这个项目并不需要任何。 我只是构造函数或setter在测试时注入依赖项。 好简单。
你不应该总是使用@Configurable
一个原因是,它增加了很多开销:启动应用程序通常需要更长的时间,并且创建新实例变得更慢。
对于@Component
,根本不需要它,因为通常所有的实例都是由Spring管理的。
@Component是一个Spring标记界面,当涉及到bean的自动检测时,它可以给Spring提供线索。
@Configurable是AOP加载时织造材料使用的标记。
这两者并没有太大的关系。
@Component
是用于Spring本身实例化的类,而@Configurable
用于将由您自己的代码或另一个框架实例化的类 - 例如由Hibernate或Servlet容器实现的实体。