2013-07-29 41 views
1

基于Spring manual春季会议范围的Bean的构造器启动时被调用,两次

代理对象的构造器会被称为两次。这是CGLIB代理模型的一个自然结果,其中为每个代理对象生成一个子类为 。对于每个代理实例,将创建两个 对象:实际代理对象和实现该建议的 子类的实例。

我有一个类是会话范围。我观察到构造函数在应用程序启动期间第一次调用,即使没有HTTPSession。第二次是在创建HTTPSession期间。只有在有会话的情况下,我如何才能延迟与ScopedProxyMode.TARGET_CLASS的bean实例化?我试过用@Lazy注解,但没有效果。

@Component 
@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS) 
public class WorkspaceImpl implements Workspace, Serializable { 

回答

1

要么你把CGLIB代理,或改变的副作用ScopedProxyMode.INTERFACE通过使目标类实现一个接口(如果你自己的类),它使用JDK动态代理。查看JDK动态代理与CGLib的区别https://stackoverflow.com/a/10664208/418439