在Spring将要连接的类中使用@Autowired的优缺点是什么?

为了澄清一下,我特别讨论的是@Autowired注释,而不是XML中的自动连接。

我可能只是不理解它,但对我来说,这似乎是一种反模式——您的类开始意识到它们被绑定到DI框架上,而不仅仅是pojo。也许我是一个贪吃惩罚的人,但是我喜欢为bean使用外部XML配置,而且我喜欢显式连接,这样我就确切地知道在哪里连接了什么。


当前回答

关于切换环境的讨论很少。在我参与过的大多数项目中,根据我们所工作的环境注入依赖项是一个真正的问题。使用Spring EL的xml配置非常简单,而且我不知道任何带有注释的好解决方案。我刚刚发现了一个问题:

    @Value("#{${env} == "production" ? realService : dummyService}")
    private SomeService service;

它应该会起作用,但不是一个很好的解决方案。

其他回答

我已经切换到@Autowire。在小型项目以外的任何项目上维护XML配置都成为了一项独立的任务,而且理解能力很快就下降了。

IntelliJ为Spring注释提供了很好的(不是完美的)支持。

我真的很喜欢用注释来写,而不是XML。 根据Spring手册和最新版本,XML和Annotation实现了相同的结果。

这是我的清单

Pro:

从xml中删除无用的行 简化代码调试:当您打开一个类时,您可以读取类中的内容 更快速的开发,具有400行或更多XML的项目是可读的?

缺点:

不是标准的Java实现,但您可以切换到使用@Inject,这是一个Java标准Api,因此bean仍然是Pojo 你不能简单地到处使用,db连接等等,但这只是一个观点,我更喜欢有一个地方读取所有配置。

在我们的大项目中,我们正在从@Autowire切换回XML配置。问题是bootstrap性能非常低。自动装配扫描器从自动装配搜索类路径加载所有类,因此,很多类在Spring初始化时被急切地加载。

以下是一些经验 优点

使配置更容易,因为我们可以只使用@Autowire注释 不想使用setter方法,这样类会更干净

Cons

紧密耦合到xml文件,即使我们使用DI 很难找到实现(但如果你使用像intellij这样的好ide,你肯定可以摆脱这个)

就我个人经验而言,除了在测试用例中,我很少使用@AutoWire注释。

对我来说,这是我喜欢/不喜欢Spring和自动连接的地方。

优点:

自动连接消除了讨厌的XML配置。 更容易使用注释,它允许您直接使用字段、setter方法或构造函数进行注入。还允许您注释和“限定”注入的bean。

缺点:

使用自动连接和注释使您依赖于Spring库,与XML配置一样,您可以选择使用或不使用Spring运行。如您所说,您将绑定到DI框架。 与此同时,我喜欢能够“限定”bean,对我来说,这使代码非常混乱。如果您需要在多个地方注入相同的bean,我看到过在各处重复使用相同的字符串名称。在我看来,这似乎有潜在的错误。

我已经开始几乎只在工作中使用自动连接,因为我们太依赖Spring集成了,所以依赖关系问题是没有意义的。我曾经在一个Spring MVC项目中工作过,这个项目大量使用了自动连接,有点难以理解。

我认为自动连接是一种后天养成的习惯,一旦习惯了它,您就会意识到它是多么强大、简单,而且使用起来比使用XML配置少得多。