当前位置: 首页 > news >正文

Spring_Bean的自动装配

目录

三种配置机制

测试搭建

byName

byType

使用注解

@Autowire

@Qualifer

@Resource

@Autowire和@Resource的不同


自动装配是使用spring满足bean依赖的一种条件

三种配置机制

  1. 在xml中显式配置;
  2. 在java中显式配置;
  3. 隐式的bean发现机制和自动装配。

这里主要介绍第三种自动装配的方式

Spring的自动装配需要从两个角度来实现,或者说是两个操作:

  1. 组件扫描(component scanning):spring会自动发现应用上下文中所创建的bean;
  2. 自动装配(autowiring):spring自动满足bean之间的依赖,也就是我们说的IoC/DI;

组件扫描和自动装配组合发挥巨大威力,使的显示的配置降低到最少。

测试搭建

public class Cat {public void shout() {System.out.println("miao~");}
}
public class Dog {public void shout() {System.out.println("wang~");}
}
public class User {private Cat cat;private Dog dog;private String str;
}
public class User {private Cat cat;private Dog dog;private String str;
}

byName

由于在手动配置xml过程中,常常发生字母缺漏和大小写等错误,而无法对其进行检查,使得开发效率降低。

spring的配置文件

<bean id="user" class="com.spring.pojo.User" autowire="byName"><property name="str" value="张三"/>
</bean>

此时我们看到bean中的一个autowire属性,他会去寻找类中的set名,获得将set去掉并且首字母小写的字符串,去spring容器中寻找是否有此字符串名称id的对象。如果有,就取出注入;如果没有,就报空指针异常(例如将cat改为catXXX)。

byType

确保:同一类型的对象,在spring容器中唯一。

将bean中的autowire改为byType,假如出现两个bean的class类相同就会出现异常,因为type是按照类型进行配置

使用注解

准备工作,在spring.xml配置文件注入属性

xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd

@Autowire

按照类型进行配置,不支持id匹配

public class User {@Autowiredprivate Cat cat;@Autowiredprivate Dog dog;private String str;public Cat getCat() {return cat;}public Dog getDog() {return dog;}public String getStr() {return str;}
}

补充@Autowired(required=false) 说明: false,对象可以为null;true,对象必须存对象,不能为null。 

@Qualifer

  • @Autowired是根据类型自动装配的,加上@Qualifier则可以根据byName的方式自动装配

  • @Qualifier不能单独使用。

还可以在后面假如value属性

@Autowired
@Qualifier(value = "cat2")
private Cat cat;
@Autowired
@Qualifier(value = "dog2")
private Dog dog;

@Resource

Resource如果有name属性,则按先name匹配,否则再按byname匹配,如果都不成功再按bytype

@Resource
private Cat cat;
@Resource
private Dog dog;

@Autowire和@Resource的不同

1. @Autowired注解是spring的注解,此注解只根据type进行注入,不会去匹配name.但是如果只根据type无法辨别注入对象时,就需要配合使用@Qualifier注解  

2. 它们的作用相同都是用注解方式注入对象,但执行顺序不同。@Autowired先byType,@Resource先byName。

http://www.lryc.cn/news/149872.html

相关文章:

  • 使用boost::geometry::union_ 合并边界(内、外)- 方案一
  • 面向高速公路车辆切入场景的自动驾驶测试用例生成方法
  • Java:SpringBoot整合SSE(Server-Sent Events)实现后端主动向前端推送数据
  • cmd命令行设置 windows 设置环境变量
  • 基于负载均衡的在线OJ实战项目
  • Opencv手工选择图片区域去水印
  • 《向量数据库》——向量数据库跟大模型是什么关系呢?
  • 通过这 5 项 ChatGPT 创新增强您的见解
  • W5500-EVB-PICO主动PING主机IP检测连通性(十)
  • 解释基本的3D理论
  • C# 练习题
  • 解决Linux报错:Swap file “xxxxxx.swp“ already exists
  • 基于飞桨图学习框架的空间异配性感知图神经网络
  • Springboot整合JWT
  • 如何使用Python和正则表达式处理XML表单数据
  • LA@方阵相似@相似矩阵的性质
  • ZLMediaKit 各种推拉流
  • 行业追踪,2023-08-29
  • 【简单】228. 汇总区间
  • Mysql高级语句
  • Python中 re.compile 函数的使用
  • 【分布式搜索引擎es】
  • 单片机的ADC
  • 如何把pdf文件合并?分享最新pdf合并方法
  • 笙默考试管理系统-MyExamTest----codemirror(11)
  • Spring MVC 五 - Spring MVC的配置和DispatcherServlet初始化过程
  • Ramp 有点意思的题目
  • 算法通关村14关 | 堆在数组中找第k大的元素应用
  • Unity 顶点vertices,uv,与图片贴图,与mesh
  • Shell编程之函数