SpringDI(依赖注入) 以及SpringIOC容器对Bean管理

一、SpringDI(依赖注入)

1.DI依赖注入
1.1 Spring DI的理解

关键字:名词解释

DI ( Dependecy Inject,中文释义:依赖注入)是对Ioc概念的不同角度的描述,是指应用程序在运行时,每一个bean对象都依赖IoC 容器注入当前bean对象所需要的另外一个bean对象。(例如在(MyBatis整合Spring 时,SqlSessionFactoryBean依赖(IoC容器注入一个Datasource数据源bean ) ;

1.2 作用

将springioc容器所创建的各个组件,使用DI的语法进行关联,耦合(胶水)

1.3 DI实现方式
①set注入

语法:

  • set方法
  • set配置

<property name value ref>

java 复制代码
<bean id="controllerImp" class="com.ztt.controller.UserControllerImp">
<property name="service" ref="serviceImp"></property>
</bean>
②构造注入

语法:

  • 构造方法
  • 构造配置

<constructor-arg name type index value ref>

java 复制代码
<bean id="student2" class="com.ztt.pojo.Student">
<constructor-arg name="stuName" value="甜甜"></constructor-arg>
<constructor-arg name="stuAge" value="18"></constructor-arg>
<constructor-arg name="stuHobby" value="学习"></constructor-arg>
</bean>
java 复制代码
/****************构造注入*******************/
public Student(String stuName, int stuAge, String stuHobby) {
    this.stuName = stuName;
    this.stuAge = stuAge;
    this.stuHobby = stuHobby;
}

public Student() {
}

/****************set注入*******************/
public void setStuName(String stuName) {
this.stuName = stuName;
}

public void setStuAge(int stuAge) {
    this.stuAge = stuAge;
}

public void setStuHobby(String stuHobby) {
this.stuHobby = stuHobby;
}
③注解注入
1.4 DI数据类型

基本类型与String

java 复制代码
<!--=========================set注入基本类型与String===============================-->
<bean id="student" class="com.ztt.pojo.Student">
<property name="stuName" value="甜甜"></property>
<property name="stuAge" value='18'></property>
<property name="stuHobby" value="学习"></property>
</bean>

JavaBean

java 复制代码
<bean id="serviceImp" class="com.ztt.service.UserServiceImp">
    <property name="dao" ref="daoImp"></property>
</bean>

复杂类型,list set array map properties(构造注入不支持)

java 复制代码
<!--=========================set注入复杂类型===============================-->
<bean id="teacher" class="com.ztt.pojo.Teacher">
<property name="myList">
<list>
<value>苹果</value>
<value>西瓜</value>
<value>桃子</value>
</list>
</property>

<property name="array">
<array>
<value>跑步</value>
<value>跳绳</value>
<value>学习</value>
</array>
</property>
<property name="mySet">
<set>
<value>蜜雪冰城</value>
<value>霸王茶姬</value>
<value>茉莉奶绿</value>
</set>
</property>

<property name="myMap">
<map>
<entry key="甜甜" value="甜甜不甜"></entry>
<entry key="娜娜" value="娜娜不辣"></entry>
<entry key="的的" value="啊的的的"></entry>
</map>
</property>
<property name="myProp">
<props>
<prop key="法国">巴黎</prop>
<prop key="英国">伦敦</prop>
<prop key="美国">华盛顿</prop>
</props>
</property>
</bean>
④DI使用步骤
  • 思考,什么方式,什么数据类型
  • 给属性提供set(构造)方法
  • 编写配置文件

二、SpringIOC容器对Bean管理

1.bean实例化
  • 通过构造方法(默认)
  • 通过工厂方法
  • 通过静态工厂方法
java 复制代码
<!--==========================bean的实例化方式1====================================-->
<!--        <bean id="student" class="com.ztt.pojo.Student"></bean>-->

<!--==========================bean的实例化方式2====================================-->
<!--        <bean id="student" class="com.ztt.pojo.Student" factory-bean="factory" factory-method="createStu"></bean>-->

<!--        <bean id="factory" class="com.ztt.factory.BeansFactory"></bean>-->

<!--==========================bean的实例化方式3====================================-->
<!--        <bean id="student" class="com.ztt.factory.StaticBeansFactory" factory-method="createStu"></bean>-->
2.bean作用域
  • 含义:spring对于创建javaBean实例的方式
  • 语法:<bean scope="属性值"></bean>
  • 属性值:

singleton=====>单例(默认)

prototype=====>多例

request=======>一个请求创建一个

session=======>一个会话创建一个

java 复制代码
<!--==========================bean的作用域====================================-->
<!--    <bean id="teacher" class="com.ztt.pojo.Teacher" scope="prototype"></bean>-->
3.bean生命周期

实例化

属性赋值(DI)

初始化

接口 DisposableBean

属性 destory-method=""

操作使用

销毁了

接口 InitializingBean

属性 init-method=""

java 复制代码
<!--==========================bean的生命周期====================================-->
<bean id="user" class="com.ztt.pojo.User" init-method="doinit" destroy-method="doDestory">
<property name="uname" value="杨文琪"></property>
</bean>
java 复制代码
public class User implements InitializingBean, DisposableBean {

    private String uname;

    public void setUname(String uname) {
        System.out.println("bean生命周期===》属性赋值");
        this.uname = uname;
    }

    public User() {
        System.out.println("bean生命周期===》实例化");
    }

    //接口
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("bean生命周期===》初始化(接口)");
    }

    //属性
    public void doinit() {
        System.out.println("bean生命周期===》初始化(属性)");
    }

    //接口
    @Override
    public void destroy() throws Exception {
        System.out.println("bean生命周期===》销毁(接口)");
    }

    //属性
    public void doDestory() {
        System.out.println("bean生命周期===》销毁(属性)");
    }
}
相关推荐
后端小肥肠4 分钟前
【Spring Security系列】如何用Spring Security集成手机验证码登录?五分钟搞定!
java·spring boot·后端·spring
goTsHgo12 分钟前
Clickhouse如何完全保证数据的去重
数据库·clickhouse
Dylanioucn12 分钟前
【编程底层原理】亿级数据表查询最后10条记录limit 99999990,10性能为啥特慢,而且数据库都被查宕机了
数据库·oracle
goTsHgo12 分钟前
从底层原理上理解ClickHouse 中的稀疏索引
数据库·clickhouse
龟四崛起21 分钟前
你的绩效是不是常年都是B
java·经验分享·程序人生·职场和发展·职场发展
⠀One0ne22 分钟前
软件设计原则(Java实现/给出正例反例)
java·软件工程
拾木2001 小时前
常见的限流算法
java·开发语言
处处清欢1 小时前
MaintenanceController
java·开发语言
不染_是非1 小时前
Django学习实战篇四(适合略有基础的新手小白学习)(从0开发项目)
数据库·后端·学习·django·web
飞翔的佩奇1 小时前
Java项目: 基于SpringBoot+mybatis+maven校园资料分享平台(含源码+数据库+答辩PPT+毕业论文)
java·spring boot·spring·毕业设计·maven·mybatis·校园资料分享平台