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;
3.1.2修改配置文件注入
点击查看代码
 <!--    将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;
3.2.2 修改配置文件注入
点击查看代码
        <!--
            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">
posted @ 2021-12-11 17:04  风的指引  阅读(84)  评论(0)    收藏  举报