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生命周期===》销毁(属性)");
    }
}
相关推荐
robin_suli6 分钟前
Java多线程八股(三)一>多线程环境使用哈希表和ArrayList
java·开发语言·多线程·哈希表
蓝桉柒79 分钟前
安装数据库客户端工具
数据库
NiNg_1_23410 分钟前
Java中的多线程
java·开发语言
丁总学Java17 分钟前
nohup java -jar supporterSys.jar --spring.profiles.active=prod &
java·spring·jar
呆呆小雅19 分钟前
C# 结构体
android·java·c#
谢尔登19 分钟前
使用 Maven 创建 jar / war 项目
java·maven·jar
理想不理想v31 分钟前
前端开发工程师需要学什么?
java·前端·vue.js·webpack·node.js
赶路人儿33 分钟前
IntelliJ IDEA配置(mac版本)
java·macos·intellij-idea
jjw_zyfx33 分钟前
docker 的各种操作
java·docker·eureka
生财34 分钟前
获取字 short WORD 上指定的位是否有效
java·服务器·c#