SpringIoC容器对bean的管理
一、基础知识:
SpringIOC容器对bean的管理
一.spring对于bean的创建
1.通过调用构造方法创建bean对象(默认)
2.通过指定的工厂的工厂方法创建bean对象
3.通过指定的静态工厂的工厂方法创建bean对象
二.spring对bean的作用域的管理
含义:spring对bean的实例化的数量
类型:
1.单例:默认值,在整个spring容器中,只有一个bean实例
2.多例:每次获取bean的时候,都创建一个新的bean实例
web环境下
3.请求:每次http请求时,创建一个新的bean实例
4.会话:每次http会话时,创建一个新的bean实例
语法:
<bean scope="属性值"></bean>标签的scope属性
三.spring对bean的生命周期的管理
实例化:创建对象,new
属性赋值:DI
初始化:实例化后,立刻要执行的操作
1.init-method通过属性
2.InitializingBean通过接口
操作使用:使用javabean对象
销毁:对象被回收
1.destroy-method通过属性
2.InitializingBean通过接口
二、spring对于bean的创建
1.通过调用构造方法创建bean对象(默认)
1.创建student实体类
public class Student {public Student(){System.out.println("===>执行student的无参构造方法~~~");}
}
2.编写spring配置文件
<!--=========================bean的创建方式1=============================-->
<bean class="com.ape.pojo.Student" id="student"></bean>
3.编写测试类
public class Test01
{public static void main( String[] args ) {ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");Student student= (Student) applicationContext.getBean("student");System.out.println(student);}
}
2.通过指定的工厂的工厂方法创建bean对象
1.创建工厂及工厂方法
public class StudentFactory {public Student createStudent() {System.out.println("student的工厂类创建方法");return new Student();}
}
2.编写spring配置文件
<!--=========================bean的创建方式2=============================-->
<bean class="com.ape.pojo.Student" id="student" factory-bean="studentFactory" factory-method="createStudent"></bean>
<bean class="com.ape.factory.StudentFactory" id="studentFactory"></bean>
3.进行测试
测试类与类型1一致
3.通过指定的静态工厂的工厂方法创建bean对象
1.创建静态工厂
public class StaticStudentFactory {public static Student createStudent() {System.out.println("静态工厂创建对象");return new Student();}
}
2.编写spring配置文件
<!--===========================bean的创建方式3==============================-->
<bean class="com.ape.factory.StaticStudentFactory" id="student" factory-method="createStudent"></bean>
3.进行测试
测试类与类型1一致
三、spring对bean的作用域的管理
1.单例:默认值,在整个spring容器中,只有一个bean实例
2.多例:每次获取bean的时候,都创建一个新的bean实例
<!-- singleton -单例作用域-->
<!-- prototype -多例作用域-->
1.创建实体类
public class Teacher {
}
2.编写spring配置文件
<!--==========================bean的作用域==============================-->
<bean class="com.ape.pojo.Teacher" id="teacher" scope="singleton"></bean>
3.进行测试
public class Test01
{public static void main( String[] args ) {ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");Teacher teacher1= (Teacher) applicationContext.getBean("teacher");Teacher teacher2= (Teacher) applicationContext.getBean("teacher");System.out.println(teacher1 == teacher2);}
}
当使用单例作用域时(scope="singleton"):
即两个teacher为同一实例
当使用多例作用域时(scope="prototype"):
即两个teacher是不同的实例
四、spring对bean的生命周期的管理
生命周期顺序:
实例化
属性赋值
初始化
操作使用
销毁
1.创建实体类
public class Car implements InitializingBean, DisposableBean {private String cname;private int cprice;//执行销毁public void dodestory(){System.out.println("生命周期===》销毁(属性)");}public void destroy() throws Exception {System.out.println("生命周期===》销毁(接口)");}//执行初始化public void doinit(){System.out.println("生命周期===》初始化(属性)");}public void afterPropertiesSet() throws Exception {System.out.println("生命周期===》初始化(接口)");}public Car(){System.out.println("生命周期===》实例化");}public Car(String cname, int cprice) {this.cname = cname;this.cprice = cprice;}public String getCname() {return cname;}public void setCname(String cname) {System.out.println("生命周期===》DI");this.cname = cname;}public int getCprice() {return cprice;}public void setCprice(int cprice) {this.cprice = cprice;}@Overridepublic String toString() {return "Car{" +"cname='" + cname + '\'' +", cprice=" + cprice +'}';}
}
2.编写spring配置文件
<!--============================bean的生命周期==============================-->
<!--展示生命周期,必须是单例bean-->
<bean class="com.ape.pojo.Car" id="car" init-method="doinit" destroy-method="dodestory"><property name="cname" value="布加迪威龙"></property><property name="cprice" value="33"></property>
</bean>
3.进行测试
public class Test01
{public static void main( String[] args ) {ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");Car car= (Car) applicationContext.getBean("car");System.out.println(car);//关闭spring容器applicationContext.close();}
}