Spring IOC:将对象交给容器管理
IOC(Inversion of Control 即控制反转)
IOC:
控制反转:Ioc 是面向对象编程的一种设计原则,可以用来减低计算机代码之间的耦合度。
其中最常见的方式叫依赖注入(Dependency Injection,简称DI)。
IOC:将对象的控制权反转给spring容易进行管理。
DI:将对象之间的依赖关系以注入的方式进行实现。
DI实现方式:
1.set注入======》通过set方法将对象的依赖关系进行维护
2.构造方法=====》通过构造方法将对象的依赖关系进行维护
3.注解注入=====》通过注解方式将对象的依赖关系进行维护
DI数据类型的支持:
1.JavaBean对象类型
2.String和基本数据类型
3.复杂类型(构造注入不支持) Map List Array properties Set
DI实现的步骤:
1.挑选实现方式并创建对应的方法
2.查看注入数据是否支持
3.编写配置<bean>此位置
Spring对bean的管理:
1.对象的创建
1.1通过无参构造方法创建(默认)
1.2通过指定工厂创建对象
public class TeacherFactory {
public Teacher getTeacher(){
System.out.println("普通工厂创建");
return new Teacher();
}
}
1.3通过指定静态工厂创建对象
public class TeacherStaticFactory {
public static Teacher getTeacher(){
System.out.println("静态工厂执行");
return new Teacher();
}
}
<!-- 无参创建对象-->
<bean id="teacher" class="com.apesource.bean.Teacher" ></bean>
<!-- 普通工厂创建对象-->
<bean id="teacher" class="com.apesource.bean.Teacher" factory-bean="teacherfactory" factory-method="getTeacher"></bean>
<bean id="teacherfactory" class="com.apesource.factory.TeacherFactory"></bean>
<!-- 静态工厂创建-->
<bean id="teacher" class="com.apesource.factory.TeacherStaticFactory" factory-method="getTeacher"></bean>
2.对象的作用域
含义:对象的创建方式
语法:scope="作用域关键字"
位置:< bean scope="属性值">
属性值:
singleton==============》单例
prototype===============》多例
request================》一个请求创建一个对象
session================》一个会话创建一个对象
单例
<!--单例 默认-->
<bean id="teacher" class="com.apesource.bean.Teacher"></bean>
//单例
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Teacher teacher1=(Teacher) applicationContext.getBean("teacher");
Teacher teacher2=(Teacher) applicationContext.getBean("teacher");
System.out.println(teacher1==teacher2);//true
多例
<!--多例-->
<bean id="teacher" class="com.apesource.bean.Teacher" scope="prototype"></bean>
//多例
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Teacher teacher1=(Teacher) applicationContext.getBean("teacher");
Teacher teacher2=(Teacher) applicationContext.getBean("teacher");
System.out.println(teacher1==teacher2);//false
3.对象的生命周期
多例状态:
1.实例化; getBean()调用时候进行实例化
2.属性赋值: 像类的成员变量通过DI进行属性赋值 实例化之后
3.初始化: 属性赋值之后
4.操作使用:
5.销毁: GC回收机制 执行完此方法之后销毁 不可控制
单例状态:
1.实例化; 默认情况下,spring在读取xml文件的时候,就会创建对象。
2.属性赋值: 像类的成员变量通过DI进行属性赋值 实例化之后
3.初始化: 属性赋值之后
4.操作使用:
5.销毁: GC回收机制 执行完此方法之后销毁 可控制
public class Student {
private String name;
public Student() {
System.out.println("实例化");
}
public void init(){
System.out.println("初始化");
}
public void setName(String name) {
this.name = name;
System.out.println("属性赋值");
}
public void show(){
System.out.println("发芽");
}
public void destroy(){
System.out.println("销毁!");
}
}
<!-- bean的生命周期-->
<bean id="student" class="com.apesource.bean.Student" init-method="init" destroy-method="destroy">
<property name="name" value="学生"></property>
</bean>