我是spring框架中的新手。我想要强制在创建特定对象时必须初始化其数据成员。所以最好的方法是用构造函数初始化它。
@Service
class GenerationServiceFactory{
@Autowired
private MyModel model;
public GenerationServiceFactory(MyModel obj){
model = obj;
}
}
但实际的模型对象是在运行时创建的。那么当spring创建所有bean时,我该如何传递该对象。我知道它与lazy init有关。但我不知道它是如何工作的。请帮帮我..谢谢:)。
答案 0 :(得分:3)
使用延迟初始化时,Spring将根据需要创建对象。因此,如果A类依赖于B类,则在请求A类之前不会实例化B类。 Spring将导航依赖树并根据需要实例化。
答案 1 :(得分:2)
如果从单例bean引用lazy-init
bean,则将其创建为单例bean依赖关系图的一部分。你可以使用这样的动态代理来解决这个问题:
<bean id="first" class="package.TestBean1">
<property name="field" ref="second"/>
</bean>
<bean id="second" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="targetSource">
<bean class="org.springframework.aop.target.LazyInitTargetSource">
<property name="targetBeanName" value="rawSecond"/>
</bean>
</property>
</bean>
<bean id="rawSecond" class="package.TestBean2" lazy-init="true">
此配置将延迟rawSecond
实例化,直到进行第一次方法调用。
答案 2 :(得分:0)
当spring容器加载XML配置文件时,通常在spring框架中 所有豆子将立即启动。假设你的应用程序中出现了一种情况,你不希望一旦bean在容器中加载就会初始化一些bean,或者你希望它在运行时加载它,在这种情况下,你可以给出属性lazy-init = “真”。
您可以在此处查看示例example