Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring、@Autowired、@Resource和<;房地产>;_Java_Spring - Fatal编程技术网

Java Spring、@Autowired、@Resource和<;房地产>;

Java Spring、@Autowired、@Resource和<;房地产>;,java,spring,Java,Spring,这周我一直在努力学习Spring、JBoss、Maven、JPA和Hibernate,我从中得到了很多乐趣。但是,我对在类中注入资源的许多不同方法感到有些困惑。直到本周,我才意识到除了在SpringXML配置中使用标记之外,您还可以以任何其他方式注入资源 <bean id="catalogService" class="com.idbs.omics.catalog.service.CatalogService"> <property name="termDao" ref

这周我一直在努力学习Spring、JBoss、Maven、JPA和Hibernate,我从中得到了很多乐趣。但是,我对在类中注入资源的许多不同方法感到有些困惑。直到本周,我才意识到除了在SpringXML配置中使用
标记之外,您还可以以任何其他方式注入资源

<bean id="catalogService" class="com.idbs.omics.catalog.service.CatalogService">
    <property name="termDao" ref="termDao"></property>
</bean>
那么,所有这些之间的区别是什么呢?在什么情况下使用它们是对的还是错的呢?我想我在这里寻找最佳实践

为所有

@Autowired
@Resource
@Inject
我想你需要读的部分是


有许多类似的注释集。通常,Spring和非Spring版本做相同的事情。Spring试图在标准可用时接受标准,但通常Spring的人在标准出现之前就提出了自己的想法。示例:Spring支持自己的
@Autowired
注释,还支持来自JSR-330的新
@Inject
注释,以及JSR-250
@Resource
注释(所有这些注释都可以用于做同样的事情)


这里的关键概念是,Spring不强制您使用自己的代码,而是支持多种不同的方式,而无需将应用程序耦合到Spring。(仍然有一些注释没有非Spring等价物,比如
@Transactional
,但是如果您愿意,您可以通过XML添加该功能,这样您就可以让应用程序100%不受Spring的影响,并且仍然在幕后使用许多方便的注释,当然还有Spring连接和生命周期管理。

另一个方面是何时使用注释以及何时使用XMLSpring连接文件

我的观点是,这是代码可读性和重新配置能力之间的权衡

  • 如果您使用注释,那么您可以从源代码中看到连接到什么的内容。相比之下,如果您使用XML连接文件,您有两个地方可以查看

  • 如果使用XML连接文件,则可以通过修改(或使用Maven覆盖)XML连接文件来更改配置。如果使用粗体,甚至可以在已部署的webapp上执行此操作。相反,使用批注时更改IoC连接需要修改Java文件并重新编译


(旁白:在第二个项目中,理想的情况是有一个很好的基于GUI的工具来重新配置布线,可以在开发沙箱或部署的webapp文件夹中运行。有人知道这样的工具吗?

相关:@duffymo另一个无法区分“it's”和“its”的人通常我可以,但我想今天是睡眠太少和咖啡太多的情况。谢谢编辑。不用担心,西尼泽。我应该指出你的好帖子是正确的。标点符号错误是我唯一不同意的。同样从Spring参考:JSR 330的@Inject注释可以代替Spring的@Autowired In下面的示例。@Inject没有必需的属性,这与Spring的@Autowired注释不同。Spring的@Autowired注释有一个必需的属性来指示所注入的值是否是可选的。如果在类路径上有JSR 330 JAR,则会自动启用此行为。这里还存在一些其他注意事项。
@Autowired
不能用于插入非类型字段,例如开箱即用的集合。在flip上,
@Resource
不能用于多参数方法。本课程将引导您了解其中的许多内容:
**The Question!**