下面看实现注册Scope的代码:
在WebApplicationContext中定义常量
public interface WebApplicationContext extends ApplicationContext {
String SCOPE_REQUEST = "request";
String SCOPE_SESSION = "session";
String SCOPE_GLOBAL_SESSION = "globalSession";
}然后在所有类型的Web应用上下文的实现中,都在Bean工厂的拦载过程中通过postProcessBeanFactory方法来注册新类型Scope,如GenericWebApplicationContext、StaticWebApplicationContext、AbstractRefreshableWebApplicationContext等WebApplication应用上下文实现中。
protected void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {
beanFactory.registerScope(SCOPE_REQUEST, new RequestScope());//注册request类型的Bean
beanFactory.registerScope(SCOPE_SESSION, new SessionScope(false));//注册session类型的Bean
beanFactory.registerScope(SCOPE_GLOBAL_SESSION, new SessionScope(true));//注册glogalsession 的Bean
}结合上面的代码,现在应该明白为什么只有在Web应用上下文中才能使用新增加三种类型的Bean了吧。当然,由于有了Scope,我们也可以非常轻松的实现我们自己的Scope,增加新用户自定义类型的Bean,然后设计出一个适合我们自己的Bean工厂。
[责任编辑:editorforddvip]
相关链接
本栏更新