当前位置: 首页 > news >正文

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>

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

语法:

  • 构造方法
  • 构造配置

    <constructor-arg name type index value ref>

<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>
/****************构造注入*******************/
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

<!--=========================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

<bean id="serviceImp" class="com.ztt.service.UserServiceImp"><property name="dao" ref="daoImp"></property>
</bean>

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

<!--=========================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实例化
  • 通过构造方法(默认)
  • 通过工厂方法
  • 通过静态工厂方法
<!--==========================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=======>一个会话创建一个

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

实例化

属性赋值(DI)

初始化

        接口 DisposableBean

        属性 destory-method=""

操作使用

销毁了

        接口 InitializingBean

        属性 init-method=""

<!--==========================bean的生命周期====================================-->
<bean id="user" class="com.ztt.pojo.User" init-method="doinit" destroy-method="doDestory">
<property name="uname" value="杨文琪"></property>
</bean>
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生命周期===》实例化");}//接口@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("bean生命周期===》初始化(接口)");}//属性public void doinit() {System.out.println("bean生命周期===》初始化(属性)");}//接口@Overridepublic void destroy() throws Exception {System.out.println("bean生命周期===》销毁(接口)");}//属性public void doDestory() {System.out.println("bean生命周期===》销毁(属性)");}
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

http://www.lryc.cn/news/417059.html

相关文章:

  • 伯克利Linux系统管理: 脚本编写学习 课堂与实验(系统简洁保姆级学习)
  • 探索腾讯云AI代码助手的效能与实用性
  • 清华大学终于把Python整理成了《漫画书》
  • 有关Linux操作系统中僵尸进程与孤儿进程的理解
  • Go语言实现依赖注入
  • 不仅能防沉迷游戏的防沉迷软件(Python)
  • 数学建模--智能算法之鱼群算法
  • html+css+js前端作业qq音乐官网5个页面 带js
  • 【mars3d】加载超图s3m模型说明
  • LeetCode Hot100 二叉搜索树中第K小的元素
  • CBK-D5-安全测试与开发osg15、20、21
  • 期权杠杆与期货杠杆的区别是什么?
  • 数字人解决方案——音频驱动机器人
  • Linux Tcp 连接 状态 检测 处理
  • String respIson = objectMapper.writeValueAsString(response);
  • git squash、merge 、 rebase
  • 案例开发-日程管理2第一期(超详细教程、配备图文和源代码注释,没学过也能看懂)
  • c# 逻辑运算符和条件运算符
  • Linux驱动开发—设备树传递给内核,匹配驱动过程分析
  • 深入理解 Go 语言信号量 Semaphore
  • git——删除远程仓库中的文件或文件夹步骤图解(只是从远程仓库中删除,本地文件不受影响、不会被删除)
  • 详解贪心算法
  • LabVIEW工件表面瑕疵识别系统
  • LabVIEW水下根石监测系统
  • 探索全光网技术 | 全光网络技术方案选型建议三(医院场景)
  • 【C++语言】vector迭代器与常见oj题
  • 高职物联网智慧农业实训室建设方案
  • Pytorch 高效快速加载大规模数据集
  • Spring Boot集成protobuf快速入门Demo
  • SpringBoot+Vue 简单小文章项目开发全过程