目录
1、什么是IoC?
IoC译为"控制反转",IoC容器不是一种技术而是一种思想,其核心在于把Java对象的控权交给Spring全面管理。Spring通过IoC容器管理Java对象的实例化和初始化,控制对象与对象之间的依赖关系,对象的创建到销毁都由IoC容器管理。
2、 什么是DI?
DI译为"依赖注入",IoC是一种思想而DI则是这种思想的具体实现。它可以将对象依赖属性通过配置进行注入。
3、Bean的作用域
1、单实例 Bean对象的地址相同
2、多实例 Bean对象的地址不同
在单例下,对象是IoC容器初始化时创建的。
在多实例下,对象是获取Bean时创建的。
4、Bean的生命周期(Bean对象从创建到销毁的过程)
1、Bean对象创建
2、Bean对象属性赋值
3、Bean后置处理器(初始化之前)
4、Bean对象初始化(调用指 定的初始化方法)
5、Bean后置处理器(初始化之后)
6、Bean对象创建完毕可以使用
7、Bean对象销毁(配置指定销毁的方法)
package com.toonyoo.spring.IoC.life;
public class User {
private String name;
public User() {
System.out.println("1 Bean对象创建,调用无参构造");
}
public String getName() {
return name;
}
public void setName(String name) {
System.out.println("2 Bean对象属性赋值");
this.name = name;
}
public void init(){
System.out.println("4 调用指定的初始化方法");
}
public void destroy(){
System.out.println(" 7 调用指定的销毁方法");
}
}
package com.toonyoo.spring.IoC.life;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
public class MyBeanPost implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("3 Bean后置处理器,初始化之前执行");
System.out.println(beanName+"::"+bean);
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("5 Bean后置处理器,初始化之后执行");
System.out.println(beanName+"::"+bean);
return bean;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="com.toonyoo.spring.IoC.life.User" scope="singleton" init-method="init" destroy-method="destroy">
<property name="name" value="mike"></property>
</bean>
<bean id="myBeanPost" class="com.toonyoo.spring.IoC.life.MyBeanPost"></bean>
</beans>
package com.toonyoo.spring.IoC.life;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UserTest {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean-life.xml");
User user = context.getBean("user", User.class);
System.out.println("6 Bean对象创建完毕可以使用");
System.out.println(user);
context.close();// 当调用此方法,就会执行配置文件中指定的销毁方法
}
}