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生命周期===》销毁(属性)");
    }
}
相关推荐
WaaTong3 分钟前
Java反射
java·开发语言·反射
齐 飞27 分钟前
MongoDB笔记01-概念与安装
前端·数据库·笔记·后端·mongodb
云空28 分钟前
《Python 与 SQLite:强大的数据库组合》
数据库·python·sqlite
暮毅32 分钟前
10.Node.js连接MongoDb
数据库·mongodb·node.js
wowocpp35 分钟前
ubuntu 22.04 server 格式化 磁盘 为 ext4 并 自动挂载 LTS
服务器·数据库·ubuntu
九圣残炎36 分钟前
【从零开始的LeetCode-算法】1456. 定长子串中元音的最大数目
java·算法·leetcode
wclass-zhengge38 分钟前
Netty篇(入门编程)
java·linux·服务器
成富1 小时前
文本转SQL(Text-to-SQL),场景介绍与 Spring AI 实现
数据库·人工智能·sql·spring·oracle
songqq271 小时前
SQL题:使用hive查询各类型专利top 10申请人,以及对应的专利申请数
数据库·sql
计算机学长felix1 小时前
基于SpringBoot的“校园交友网站”的设计与实现(源码+数据库+文档+PPT)
数据库·spring boot·毕业设计·交友