web.xml
文章插图
<bean id="goudanBean" class="services.GoudanService"></bean><bean id="gouBean" class="services.GouService"></bean>
Test.javapackage test;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import org.springframework.context.annotation.ClassPathBeanDefinitionScanner;import org.springframework.context.support.ClassPathXmlApplicationContext;import services.GoudanService;public class Test {public static void main(String[] args) {//AnnotationConfigApplicationContext ac =//new AnnotationConfigApplicationContext(Appconfig.class);ClassPathXmlApplicationContext cc = new ClassPathXmlApplicationContext("web.xml");//System.out.println(cc.getBean(GoudanService.class).getGouService());System.out.println(cc.getBean(GoudanService.class).getGouBean());}}
运行Test.java的result文章插图
我们发现byname模型注入,与no方式注入想比不需要了bean里配置property的ref,spring容器会自动根据GouService定义属性名称去找bean的名称,结果找到了id名称为:gouBean的bean,所以也是可以配置成功的 。
byname就是如果属性名称与bean的id名称相同那么可以自动配置,否则配置错误 。construct方式配置GoudanService.java
package services;public class GoudanService {GouService gouService;GouService gouBean;//构造方法1GoudanService(GouService gouBean){this.gouBean=gouBean;}////构造方法2//GoudanService(GouService gouService){//this.gouService=gouService;//}////构造方法3//GoudanService(GouService gouService,GouService gouBean){//this.gouService=gouService;//this.gouBean=gouBean;//}public GouService getGouBean() {return gouBean;}public GouService getGouService() {return gouService;}//public void setGouBean(GouService gouBean) {//this.gouBean = gouBean;//}//public void setGouService(GouService gouService) {//this.gouService = gouService;//}}
web.xml文章插图
<bean id="goudanBean" class="services.GoudanService"></bean><bean id="gouBean" class="services.GouService"></bean>
Test.javapackage test;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import org.springframework.context.annotation.ClassPathBeanDefinitionScanner;import org.springframework.context.support.ClassPathXmlApplicationContext;import services.GoudanService;public class Test {public static void main(String[] args) {//AnnotationConfigApplicationContext ac =//new AnnotationConfigApplicationContext(Appconfig.class);ClassPathXmlApplicationContext cc = new ClassPathXmlApplicationContext("web.xml");System.out.println(cc.getBean(GoudanService.class).getGouService());System.out.println(cc.getBean(GoudanService.class).getGouBean());}}
分别运行构造方法1,2,3三次,注释掉其他两种构造方法运行Test.java的result
构造方法1
文章插图
构造方法2
文章插图
构造方法3
文章插图
我们发现construct模型注入,它既可以通过name注入也可以通过type注入 。
Annotaton-based configuration(注解注入方式)@Autowired在这里,很多人网上说@Autowired是通过bytype查找,但其实这种说法有些许的不严谨 。
1.自动注入模型是基于xml的bean注入方式 。
2.bytype模型是只要通过类型查找,如果找不到,或者找到两个相同的类型bean就会报错
3.而@Autowired是通过类型去找,找不到还会通过名称去找
@Resource而@Resource是通过byname查找,这种说法和@Autowired相似也是不严谨的 。
byname模型是只要通过名称查找,如果找不到报错而@Resource是通过名称去找,找不到还会通过类型去找,不单单只限于通过name去查找 。
区别
- @Autowired type --> name --> error
spring包中的AutowiredAnnotationBeanPostProcessor.java中的一个方法实现解析的 - @Resource name --> type --> error
javax中的 commonAnnotationBeanPostProcessor.java中的一个方法实现解析的
来源:https://blog.csdn.net/qq_40994080/article/details/108090104?utm_medium=distribute.pc_category.none-task-blog-hot-2.nonecase&depth_1-utm_source=distribute.pc_category.none-task-blog-hot-2.nonecase&request_id=
推荐阅读
- 抖音小店无货源店群大揭秘,这些你真的清楚吗?
- 如何给WINDOWS 7注入USB和NVME驱动?
- 玩转SpringBoot之整合 shiro 权限框架
- Spring Boot 12 国际化
- 什么是计时攻击?Spring Boot 中该如何防御?
- SpringBoot-登录验证码实现
- 跟常用框架SpringSecurity比 微服务到底胜在哪?
- 大牛教大家如何用SpringBoot技术快速实现天气预报系统
- 欧拉|比男人更懂女人 欧拉注入“她力量”:最爱女性的汽车倾力打造“她生态”
- 如何按照条件向Spring容器中注册bean?这次我懂了