Spring依赖注入

1依赖注入方式

1.构造参数注入

将一个bean创建过程中构造方法需要的参数,通过Spring DI的方式,自动注入到构造方法中。

2.Setter注入

先通过一个无参的构造方法创建对象,然后通过属性的setter方法,将属性值注入到对象上。

普通类型

String

Integer(int)

Long(long)

Byte(byte)

...

集合类型

List

Map

Set

java.util.Properties

自动装配(自动注入)

主要针对引用类型(自定义类)

自动装配(自动注入)支持的策略

byType (类型)

按照类型去IOC容器中找需要的bean,如果找到一个,则自动装配;如果没找到,不注入此属性; 如果找到了多个匹配类型的bean,就会报错。

byName(名称)

按照名称去IOC容器中找需要的bean,如果找到就自动注入;如果没找到,不注入此属性。

constructor(构造器)

工作原理和byType类似,也是按照类型去IOC容器中找对应的bean。不同的是注入的地方不是 setter,而是构造方法的参数。

no (默认值)

如果没有打开自动注入,默认Spring不会自动装配需要的属性,需要通过和标签的ref属性来定义。

2.XML方式的依赖注入

构造参数注入

常规写法

<bean id="xx" class="" />
<!-- 相当于调用了有参构造方法创建对象: XXX xxx = new XXX(45, xx, ...); -->
<bean class="com.test.XXX">
<constructor-arg name="age" value="45" />
<constructor-arg name="x" ref="xx" /> <!-- 注入引用的bean -->
<constructor-arg name=""> <!-- 注入内部bean -->
<bean></bean>
</constructor-arg>
<constructor-arg name=""> <!-- 注入list类型构造参数 -->
<list>
</list>
</constructor-arg>
....
</bean>

setter方式注入

setter注入能够注入的类型以及写法基本和构造参数注入时的写法一致,只不过将 标 签换成了

常规用法

<bean id="xx" class="" />
<!-- 相当于调用了无参构造方法创建对象,然后调用set方法设置属性值:
XXX xxx = new XXX();
xxx.setAge(45);
xxx.setX(xx);
....
-->
<bean class="com.test.XXX">
<property name="age" value="45" />
<property name="x" ref="xx" /> <!-- 注入引用的bean -->
<property name=""> <!-- 注入内部bean -->
<bean></bean>
</property>
<property name=""> <!-- 注入list类型构造参数 -->
<list>
</list>
</property>
....
</bean>

开启自动装配

<!--
通过给当前的bean添加autowire属性开启自动注入
可选的值:参见上面自动注入
-->
<bean id="xx" class="" autowire="" />

全局自动装配

在配置文件的beans中配置,进行全局自动装配

default-autowire="byType"

3.注解方式的依赖注入

构造参数注入

在构造方法上添加 @Autowired 注解,构造方法的参数就会自动注入进来

示例:

applicationContext.xml配置文件开启注解支持

<!-- 开启spring注解 -->
<context:component-scan base-package="com.spring.springdi"></context:component-scan>

创建bean类

@Component
public class Pepole {
private Gril gril;
@Autowired //在构造函数上时,根据参数的类型到spring容器中寻找对应的对象,进行注入
public Pepole(Gril gril) {
this.gril = gril;
}
@Override
public String toString() {
return "Pepole{" +
"gril=" + gril +
'}';
}
}
@Component
public class Gril {
}
public class ApplicationConstructor {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new
ClassPathXmlApplicationContext("applicationContext.xml");
Pepole pepole = context.getBean("pepole", Pepole.class);
System.out.println(pepole);
}
}

setter方法注入

方法有两种:

1. 在属性的setter方法上添加 @Autowired 注解

public class SimpleMovieLister {
private MovieFinder movieFinder;
@Autowired
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
// ...
}

2. 在属性上添加 @Autowired 注解

public class MovieRecommender {
@Autowired
private MovieCatalog movieCatalog;
// setter and getter...
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值