spring重点整理篇:spring 的自动注入(自问自答版本)

spring 的自动注入怎么来的?

延申:
一、 Spring的三种注入方式

1、构造器注入
2、setter注入
3、注解(@Autowired、@Resource、@Qualifier )

二、为什么要用自动注入?

因为在bean很多或者自定义的类很多的情况下,就需要在xml文件中一直写bean并且还要将每一个属性set(构造方法)入参的方式引入bean里面,这样的耦合性变高,后期也不容易进行维护

三、类属性注入到Spring容器中有几种方式?

@Autowired 按类型注入 Spring自己的注解,是自动注入,自动从spring的上下文找到合适的bean来注入
@Resource用来指定Bean名称注入
@Qualifier (和Autowired配合使用,指定bean的名称)

1.xml中可以在bean元素中通过autowire属性来设置自动注入的方式

<bean id="" class="" autowire="byType|byName|constructor|default" />

开始进入主题:
spring 的自动注入怎么来的?

1.byteName:按照名称进行注入
2.byType:按类型进行注入
3.constructor:按照构造方法进行注入
4.default:默认注入方式

1.按照名称进行注入(byName)
用法:
autowire设置为byName

<bean id="" class="X类" autowire="byName"/>

spring容器会按照set属性的名称去容器中查找同名的bean对象,然后将查找到的对象通过set方法注入到对应的bean中,未找到对应名称的bean对象则set方法不进行注入

需要注入的set属性的名称和被注入的bean的名称必须一致。

2.按照类型进行自动注入
用法:
autowire设置为byType

<bean id="" class="X类" autowire="byType"/>

spring容器会遍历x类中所有的set方法,会在容器中查找和set参数类型相同的bean对象,将其通过set方法进行注入,未找到对应类型的bean对象则set方法不进行注入

3.按照构造函数进行自动注入
用法:
autowire设置为constructor

<bean id="" class="X类" autowire="constructor"/>

spring会找到x类中所有的构造方法(一个类可能有多个构造方法),然后将这些构造方法进行排序得到一个构造函数列表,会轮询这个构造器列表,判断当前构造器所有参数是否在容器中都可以找到匹配的bean对象,如果可以找到就使用这个构造器进行注入,如果不能找到,那么就会跳过这个构造器,继续采用同样的方式匹配下一个构造器,直到找到一个合适的为止。

4.autowire=default
用法:
autowire设置为default

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.3.xsd"
       default-autowire="byName">
 
</beans>

bean xml的根元素为beans,注意根元素有个default-autowire属性,这个属性可选值有(no|byName|byType|constructor|default),这个属性可以批量设置当前文件中所有bean的自动注入的方式,bean元素中如果省略了autowire属性,那么会取default-autowire的值作为其autowire的值,而每个bean元素还可以单独设置自己的autowire覆盖default-autowire的配置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值