分别创建4个不同作用域的Bean,并使用注解的方式开发,@Component表名它们是组件类,需要Spring容器帮忙创建,@Scope注明作用域,value指明是哪种作用域,除了SingletonBean外,其它Bean还使用proxyMode指明哪种代理模式创建,这里没有接口,因此使用CGLib代理生成。
@Component
@Scope(value = "singleton")
public class SingletonBean {
//......
}
@Component
@Scope(value = "prototype" , proxyMode = ScopedProxyMode.TARGET_CLASS)
public class PrototypeBean {
//......
}
@Component
@Scope(value = "request" , proxyMode = ScopedProxyMode.TARGET_CLASS)
public class RequestBean {
//......
}
@Component
@Scope(value = "session" , proxyMode = ScopedProxyMode.TARGET_CLASS)
public class SessionBean {
//........
}
Scope 的 proxyMode
当session scope的bean要注入到singletone scope的bean时,需要声明为proxy模式。
如果有接口,可以使用 ScopedProxyMode.INTERFACES ,如果没有就需要声明 ScopedProxyMode.TARGET_CLASS ,表示使用CGLib动态生成一个代理。