spring ioc 依赖注入
对于Spring IOC 容器而言我们更多的是使用它的依赖注入。Spring 创建对象的过程叫
做IOC,创建对象时给对象属性赋值叫做DI,所以我们可以认为IOC 和DI 是同一个事情。
开闭原则
OCP (Open Close Principle): 软件本身应该是可扩展的,而不可修改的。也就是,对扩
展开放,对修改封闭的。
1.依赖注入的方式
在使用依赖注入时,如果注入的是Bean 对象,那么要求注入的Bean 对象与被注入的
Bean 对象都需要Spring IOC 容器来实例化。
set注入和构造注入
3.1 set注入
3.1.1 修改service实现服务类
需要为注入的成员变量提供Set 方法。
点击查看代码
public void setUsersDao(UsersDao usersDao) {
this.usersDao = usersDao;
}
//1.set注入,不需要new
private UsersDao usersDao;
点击查看代码
<!-- 将bean给spring管理 构造方法创建 name可以起别名 lazy-init="true" 代表延迟创建 scope="singleton" 代表单列立即创建 scope="prototype"代表多列 使用时创建 -->
<bean id="usersService" name="name1,name2,name3" class="com.njsxt.service.impl.UsersServiceImpl" lazy-init="false" scope="singleton" >
<!-- name:要注入的方法名-->
<!-- ref bean:要注入的bean id-->
<property name="usersDao" >
<ref bean="userDaoImpl" />
</property>
</bean>
<bean id="userDaoImpl" class="com.njsxt.dao.impl.UsersDaoImpl" />
3.2 构造注入
3.2.1 修改service实现服务类
点击查看代码
//用于注入的构造方法
public UsersServiceImpl(UsersDao usersDao) {
this.usersDao = usersDao;
}
//1.set注入,不需要new
private UsersDao usersDao;
点击查看代码
<!--
name:根据参数名称识别参数
index:根据参数的位置来识别参数
type:根据参数的类型识别参数
-->
<constructor-arg name="usersDao" ref="userDaoMybatis" />
</bean>
<bean id="userDaoMybatis" class="com.njsxt.dao.impl.usersDaoMybatis"/>
<bean id="userDaoImpl" class="com.njsxt.dao.impl.UsersDaoImpl" />
2.自动依赖注入的方式
局部注入和全局注入
自动注入的方式有两种,一种是全局配置自动注入,另一种是局部配置自动注入。
无论全局配置或局部单独配置,都有5 个值可以选择:
no:当autowire 设置为no 的时候,Spring 就不会进行自动注入。
byName:在Spring 容器中查找id 与属性名相同的bean,并进行注入。需要提供set 方
法。
byType:在Spring 容器中查找类型与属性名的类型相同的bean,并进行注入。需要提供set 方法。
constructor:仍旧是使用byName 方式,只不过注入的时候,使用构造方式进行注入。
default:全局配置的default 相当于no,局部的default 表示使用全局配置设置。
1.局部注入
通过bean 标签中的autowier 属性配置自动注入。
有效范围:仅针对当前bean 标签生效。
bytype注入,如果容器中有多个一样的属性,会报错
点击查看代码
<bean id="usersDaoMybatis"
class="com.bjsxt.dao.impl.UsersDaoMybatisImpl"/>
<bean id="usersService" name="name1,name2,name3"
class="com.bjsxt.service.impl.UsersServiceImpl" autowire="byType">
</bean>
2.全局注入
通过beans 标签中的default-autowire 属性配置自动注入。
有效范围:配置文件中的所有bean 标签都生效。
点击查看代码
<?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"
default-autowire="byName">

浙公网安备 33010602011771号