在Spring将要连接的类中使用@Autowired的优缺点是什么?
为了澄清一下,我特别讨论的是@Autowired注释,而不是XML中的自动连接。
我可能只是不理解它,但对我来说,这似乎是一种反模式——您的类开始意识到它们被绑定到DI框架上,而不仅仅是pojo。也许我是一个贪吃惩罚的人,但是我喜欢为bean使用外部XML配置,而且我喜欢显式连接,这样我就确切地知道在哪里连接了什么。
在Spring将要连接的类中使用@Autowired的优缺点是什么?
为了澄清一下,我特别讨论的是@Autowired注释,而不是XML中的自动连接。
我可能只是不理解它,但对我来说,这似乎是一种反模式——您的类开始意识到它们被绑定到DI框架上,而不仅仅是pojo。也许我是一个贪吃惩罚的人,但是我喜欢为bean使用外部XML配置,而且我喜欢显式连接,这样我就确切地知道在哪里连接了什么。
当前回答
在我们的大项目中,我们正在从@Autowire切换回XML配置。问题是bootstrap性能非常低。自动装配扫描器从自动装配搜索类路径加载所有类,因此,很多类在Spring初始化时被急切地加载。
其他回答
根据我的理解,@Autowired是最好的使用,同时参考接口引用和使用它的覆盖函数,但我只发现问题是,它有时在运行时被分配为null。
我已经切换到@Autowire。在小型项目以外的任何项目上维护XML配置都成为了一项独立的任务,而且理解能力很快就下降了。
IntelliJ为Spring注释提供了很好的(不是完美的)支持。
关于切换环境的讨论很少。在我参与过的大多数项目中,根据我们所工作的环境注入依赖项是一个真正的问题。使用Spring EL的xml配置非常简单,而且我不知道任何带有注释的好解决方案。我刚刚发现了一个问题:
@Value("#{${env} == "production" ? realService : dummyService}")
private SomeService service;
它应该会起作用,但不是一个很好的解决方案。
我真的很喜欢用注释来写,而不是XML。 根据Spring手册和最新版本,XML和Annotation实现了相同的结果。
这是我的清单
Pro:
从xml中删除无用的行 简化代码调试:当您打开一个类时,您可以读取类中的内容 更快速的开发,具有400行或更多XML的项目是可读的?
缺点:
不是标准的Java实现,但您可以切换到使用@Inject,这是一个Java标准Api,因此bean仍然是Pojo 你不能简单地到处使用,db连接等等,但这只是一个观点,我更喜欢有一个地方读取所有配置。
在我们的大项目中,我们正在从@Autowire切换回XML配置。问题是bootstrap性能非常低。自动装配扫描器从自动装配搜索类路径加载所有类,因此,很多类在Spring初始化时被急切地加载。