1.通过配置xml的方式来进行自动注入
在bean的参数选项中通过指定autowire属性进行自动注入
<?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.xsd">
<bean id="phone" class="com.web.pojo.Phone" scope="prototype">
<property name="name" value="小米12"/>
<property name="price" value="5499"/>
</bean>
<bean id="girl" class="com.web.pojo.Girl">
<property name="name" value="sis"/>
<property name="age" value="19"/>
</bean>
<bean id="boy" class="com.web.pojo.Boy" autowire="byName">
<property name="name" value="cg"/>
</bean>
</beans>
2.通过注解的方式进行自动注入
@Autowired自动注入
1.配置xml,导入自动注入依赖
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
2.开启注解支持
<context:annotation-config/>
3.使用@Autowired对字段进行自动注入
package com.web.pojo;
import org.springframework.beans.factory.annotation.Autowired;
public class Boy {
private String name;
private Girl girl;
@Autowired
private Phone phone;
@Autowired
public void setGirl(Girl girl){
this.girl=girl;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Boy{" +
"name='" + name + '\'' +
", girl=" + girl +
", phone=" + phone +
'}';
}
}
注意:@Autowired是通过反射的方式对属性进行注入,可以不存在相应的set方法
当然@Autowired也可以用在set方法上
@Autowired(required = false):表示该属性可以为null,默认情况下required=true
该注解默认优先通过ByType的方式进行注入,ByType注入方式失败时会通过ByName的方式进行注入
当然也存在某些情况下既不能通过ByType也不能通过ByName的方式进行注入,例如
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- 开启注解支持 -->
<context:annotation-config/>
<!-- 注册Bean -->
<bean id="boy" class="com.web.pojo.Boy">
<property name="name" value="lis"/>
</bean>
<bean id="girl1" class="com.web.pojo.Girl">
<property name="name" value="smi"/>
<property name="age" value="19"/>
</bean>
<bean id="girl2" class="com.web.pojo.Girl">
<property name="name" value="ls"/>
<property name="age" value="21"/>
</bean>
<bean id="phone1" class="com.web.pojo.Phone">
<property name="name" value="iPhone13"/>
<property name="price" value="5999"/>
</bean>
<bean id="phone2" class="com.web.pojo.Phone">
<property name="name" value="小米12"/>
<property name="price" value="5499"/>
</bean>
</beans>
所以我们需要通过另一个注解来配合@Autowired
@Qualifier:通过指定bean id的方式协助注入
当然,除了spring为我们通过的@Autowired之外,jdk也为我们提供了另一个注解,可以在非spring项目中使用
@Resource:默认优先通过ByName的方式进行注入,ByName方式注入失败时通过ByType的方式进行注入
此处我们引入另一个注解:
@Nullable:使用该注解标识的参数可以为null