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生命周期===》销毁(属性)");
    }
}
相关推荐
川贝枇杷膏cbppg11 分钟前
dm_unknown_202512.log:达梦数据库 “未分类日志“
数据库·oracle
It's now21 分钟前
Spring AI 基础开发流程
java·人工智能·后端·spring
cxh_陈21 分钟前
线程的状态,以及和锁有什么关系
java·线程·线程的状态·线程和锁
计算机毕设VX:Fegn089524 分钟前
计算机毕业设计|基于springboot + vue图书商城系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
R.lin36 分钟前
Java 8日期时间API完全指南
java·开发语言·python
毕设源码-赖学姐42 分钟前
【开题答辩全过程】以 高校教学质量监控平台为例,包含答辩的问题和答案
java·eclipse
高山上有一只小老虎1 小时前
翻之矩阵中的行
java·算法
求学中--1 小时前
MySQL 数据库完整操作命令与使用指南
数据库·sql·mysql·oracle
火钳游侠1 小时前
java单行注释,多行注释,文档注释
java·开发语言
code bean1 小时前
【CMake】为什么需要清理 CMake 缓存文件?深入理解 CMake 生成器切换机制
java·spring·缓存