spring bean的作用域和生命周期
Spring Framework支持五种作用域(其中有三种只能用在基于web的)。
在每个Spring IoC容器中一个bean定义对应一个对象实例。 | |
一个bean定义对应多个对象实例。 | |
在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例,它们依据某个bean定义创建而成。该作用域仅在基于web的Spring ApplicationContext情形下有效。 | |
在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。 | |
在一个全局的HTTP Session中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于web的SpringApplicationContext情形下有效。 |
UserService userService = (UserService)factory.getBean("userService");
userService.sayHello();
package com.myBeanPostProcessor; import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor; /** * Created by balfish on 15-3-29. */
class MyBeanPostProcessor implements BeanPostProcessor { @Override
public Object postProcessBeforeInitialization(Object o, String s) throws BeansException { System.out.println("postProcessBeforeInitialization 函数被调用");
return o;
}
@Override
public Object postProcessAfterInitialization(Object o, String s) throws BeansException { System.out.println("postProcessAfterInitialization 函数被调用");
return o;
} }
applicationContext.xml的变化
<!--配置自己的后置处理器,类似过滤器-->
<bean id="myBeanPostProcessor"
class="com.myBeanPostProcessor.MyBeanPostProcessor" />
应用场景举例
1 记录每个对象实例化的时间
2过滤每个调用ip
3给所有对象添加属性,或者函数(面向切面aop)