序言
Spring Bean到底是什么?解决什么问题?
解决主动new各种对象的问题
bean就是由IOC容器初始化、装配及管理的对象
Spring中的bean默认都是单例的,就是在创建起容器时就同时自动创建了一个bean的对象,不管你是否使用,他都存在了,每次获取到的对象都是同一个对象。
@Bean和@Autowired
通过反射实现@Autowired注解
spring有三种配置方式
- 基于XML
- 基于注解
- 基于java
一、XML配置
- instantiate bean对象实例化
- populate properties 封装属性
- 如果Bean实现BeanNameAware 执行 setBeanName
- 如果Bean实现BeanFactoryAware 或者 ApplicationContextAware 设置工厂 setBeanFactory 或者上下文对象 setApplicationContext
- 如果存在类实现 BeanPostProcessor(后处理Bean) ,执行postProcessBeforeInitialization
- 如果Bean实现InitializingBean 执行 afterPropertiesSet
- 调用<bean init-method="init"> 指定初始化方法 init
- 如果存在类实现 BeanPostProcessor(处理Bean) ,执行postProcessAfterInitialization
- 执行业务处理
- 如果Bean实现 DisposableBean 执行 destroy
- 调用<bean destroy-method="customerDestroy"> 指定销毁方法 customerDestroy
实战总结
1.对象交于Spring创建
第一步:添加UserInfo
package cn.mf.bean; public class UserInfo { private String name; private Integer age; private Car car; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Car getCar() { return car; } public void setCar(Car car) { this.car = car; } @Override public String toString() { return "UserInfo [name=" + name + ", age=" + age + ", car=" + car + ", getName()=" + getName() + ", getAge()=" + getAge() + ", getCar()=" + getCar() + "]"; } }