装配bean,基于xml
一、bean的实例化方式
1.默认构造
<bean id="" class=""></bean> 必须提供默认构造方法
2.静态工厂
用于生产实例对象,所有的方法必须都是静态的
常用于spring整合其他框架(工具)
<bean id="" class="工厂实现类" factory-method="静态方法"></bean>
3.实例工厂
必须先有实例对象,通过实例对象创建对象。所有的方法都是实例方法。
二、Bean的种类
1.普通bean:<bean id="" class=""></bean>
2.FactoryBean:是一个特殊的bean,具有工厂生产对象能力,只能生产特定的bean。
bean必须实现FactoryBean接口,此接口提供getObject()方法,用于获得特定bean。
<bean id="" class="FB"></bean>
FB fb = new FB();
return fb.getObject();
三、作用域
<bean id="userService" class="scope.UserServiceImp" scope="singleton"></bean> <bean id="userService" class="scope.UserServiceImp" scope="prototype"></bean>
四、生命周期
1.初始化和销毁
构造目标对象前后,将进行初始化和销毁
<bean id="" class="" init-method="初始化方法名" destroy-method="销毁方法名">
2.BeanPostProcessor后处理Bean(构造Bean前后执行的方法,生成代理对象,本质是bean的装饰器)->AOP的底层
spring提供一种机制,只要将实现BeanPostProcessor接口并且实现postProcessAfterInitialization(Object Bean,String BeanName)【返回代理对象】和postProcessBeforeInitialization()方法的类提供给spring容器,spring将自动执行这两个方法。执行初始化方法前
执行before方法,初始化后执行after方法。
Factory hook (钩子)that allows for custom modification of new bean instances, e.g. checking for marker interfaces or wrapping them with proxies. ->工厂钩子允许用户修改bean实例,例如,检查实现接口或者用装饰者的方式生成代理。
A a = new A();
a = B.before(a);
a.init();
a = B.after(a)
a.addUser(); //目标是在目标方法前后执行(例如事务,性能监控)
a.destory();