我正在使用lazy-init =“true”创建一个bean,但我不希望调用类的构造函数。但不管怎么说,lazy-init也被调用了。
<bean id="abc" class="a.b.c.UtilClass" lazy-init="true" />
任何人都可以帮我停止在启动时调用类构造函数吗?我想要在需要时调用它。
答案 0 :(得分:1)
这通常意味着对您的bean的依赖性也在被实例化。经典的依赖链是一个必须加载的单例(例如一个Spring MVC控制器),它引用一个服务bean,然后引用DAO bean,所以它们都必须被实例化。
如果从原型或会话bean引用它们,或者从运行时通过@Lazy
创建的bean, lazy-init
或ObjectFactory
bean会更有用。
如果对依赖链如何到达bean有疑问,请尝试在构造函数中添加断点。 BeanFactory类中的调用堆栈中通常有一些resolveDependency()
方法(例如DefaultListableBeanFactory
)。在那里查看beanName
变量值等。