12

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

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

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

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

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

4

3 回答 3

13

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

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

两人其实并没有太大的关系。

于 2009-06-16T12:50:31.303 回答
7

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

于 2012-06-26T14:52:06.270 回答
1

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

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

于 2009-06-16T10:13:45.257 回答