spring bean
作用域(scope)
作用域 | 描述 |
---|---|
singleton | 单例模式,每一个spring context中只有一个实例 |
prototype | 每次调用一个getBen方法都会产生一个新的对象 |
request | 每个request请求产生一个实例 |
session | 每个htttp session中产生一个实例 |
application(global session) | 每个servelet context 产生一个实例,这个bean是以一个属性存在于servelet context中。与singleton不同在于,一个web应用中可能存在多个spring context实例 |
WebSocket | WebSocket作用域与WebSocket会话的生命周期相关联,适用于WebSocket应用程序上的STOMP |
创建bean方式:
- 使用Spring XML方式配置,该方式用于在纯Spring 应用中,适用于简单的小应用,当应用变得复杂,将会导致XMl配置文件膨胀 ,不利于对象管理。
<bean id="xxxx" class="xxxx.xxxx"/>
- 通过标注注解定义bean,然后同过ComponentScan扫描加载bean
@Component
@Service
@Controller
@Repository
@RestController
public class TestBean {
}
注解名称 | 描述 |
---|---|
@Component | 创建bean最基本方式,标注bean |
@Controller, @RestController | 派生自@Component注解,此注解标注bean为spring mvc的controller层的bean, Spring MVC将使用这些bean接收处理客户request |
@Service | 派生自@Component注解,此注解标注bean为spring mvc的service层的bean, 用于处理业务逻辑 |
@Repository | 派生自@Component注解,此注解标注bean为spring mvc的repository层的bean, 此bean一般用于处理数据层的业务 |
- 通过bean factory 来创建bean, @Configuration,@Bean配合使用
@Configuration, 标注工厂类为配置类
@Bean, 标注工厂类里边的方法生成bean,我们还可以为bean定义多个别名
@Configuration
public class TestBeanFactory {
@Bean({"bean1","bean2"})
public Object getBean(){
return null;
}
}
Bean生命周期
转载 http://www.cnblogs.com/zrtqsk/p/3735273.html
Bean的完整生命周期经历了各种方法调用,这些方法可以划分为以下几类:
1、Bean自身的方法 : 这个包括了Bean本身调用的方法和通过配置文件中的init-method和destroy-method指定的方法
2、Bean级生命周期接口方法 : 这个包括了BeanNameAware、BeanFactoryAware、InitializingBean和DiposableBean这些接口的方法
3、容器级生命周期接口方法 : 这个包括了InstantiationAwareBeanPostProcessor 和 BeanPostProcessor 这两个接口实现,一般称它们的实现类为“后处理器”。
4、工厂后处理器接口方法 : 这个包括了AspectJWeavingEnabler, ConfigurationClassPostProcessor, CustomAutowireConfigurer等等非常有用的工厂后处理器 接口的方法。工厂后处理器也是容器级的。在应用上下文装配配置文件之后立即调用。