最新版Three.js企业3D可视化实战项目WEBGL系统
@Autowired和@Resource的区别
序
写过Spring框架的同学应该都知道,在Spring中使用字段注入时,可以同时使用@Autowired和@Resource,但是当我使用@Autowired时,idea会提示我不建议使用字段注入:
但如果我使用@Resource,就不会有这样的提示:
于是在好奇心的驱使下,我探究了两者的区别,了解了idea为什么会对@Autowired发出微弱的警告,在这里分享给大家。
默认的注入方法不同。
@Autowired默认的注入方式是byType(按类型匹配),也就是说Bean(接口的实现类)会根据接口类型先匹配注入。如果您想指定一个名称,您可以使用@Qualifier。
@自动连线
私有用户安全映射器用户安全映射器;
//或者
@ auto wired @ Qualifier(" user safety mapper ")
私有用户安全映射器用户安全映射器;
复制代码
@Resource默认注入方法是byName(按名称匹配)。如果对应的实现类不能按名称匹配,则注入模式将更改为byType。
如果同时指定了name和type,则从Spring上下文中为assembly找到唯一匹配的bean,如果没有找到,则抛出异常;
如果指定了name,将从assembly的上下文中查找具有匹配名称(id)的bean,如果找不到将抛出异常;
如果指定了type,则如果从程序集的上下文中找到具有匹配类型的唯一bean,或者如果没有找到多个bean,将引发异常。
如果既未指定名称也未指定类型,则装配将自动按名称进行。如果没有匹配,它将回到一个原始类型进行匹配,如果有匹配,它将自动组装。
// 1.默认注入方法
@资源
私有用户安全映射器用户安全映射器;
// 2.指定注射模式
@ Resource(name = " user safety mapper ",type = UserSafetyMapper.class)
私有用户安全映射器用户安全映射器;
复制代码
提供商不同。
@Autowired是spring提供的注释,@Resource是JDK提供的注释。其实这也是为什么idea会警告@Autowired而不是@Resource的原因。
根据我查阅的一些资源和一点个人理解,得出以下分析:
@Autowired由Spring提供。它只能应用于春天。它是由特定的IOC提供的特定注释,这导致了程序和框架之间的强耦合。一旦使用其他IOC框架,就会失效,无法支持注入。@Resource是Java提供的一个标准,一般的IOC容器都要主动兼容@Resource,这样我们即使改了其他框架也能正常使用字段注入的功能。
不过话说回来,我们在立项的时候,只是刚开始选择框架,以后很可能不会用其他框架来替代。即使场注入是松耦合的,但实际上还有很多其他需要修改的地方,所以我个人认为两者都可以。用哪一个取决于公司的编码规范。个人项目的话,用一个就好了。
最新版Three.js企业3D可视化实战项目WEBGL系统
download链接:https://pan.baidu.com/s/1YLH4pC8VpYGAaNAvF8yZfw?pwd=w67b
提取码:w67b
--来自百度网盘超级会员V5的分享