一、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生命周期===》销毁(属性)");
}
}