3

我是spring框架的新手。我想要强制在创建特定对象时必须初始化其数据成员。所以最好的方法是用构造函数初始化它。

@Service
class GenerationServiceFactory{

@Autowired
private MyModel model;

public GenerationServiceFactory(MyModel obj){
model = obj;
}

}

但是实际的模型对象是在运行时创建的。那么当spring创建所有bean时我如何传递该对象。我知道它与惰性初始化有关。但我不知道它是如何工作的。请帮助我..谢谢:)

4

3 回答 3

3

当使用延迟初始化时,Spring 将根据需要创建对象。因此,如果 A 类依赖于 B 类,则在请求 A 类之前不会实例化 B 类。Spring 将导航依赖关系树并根据需要进行实例化。

于 2013-10-23T12:29:11.503 回答
2

如果lazy-initbean 是从单例 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实例化,直到进行第​​一个方法调用。

于 2013-10-23T12:31:20.490 回答
0

通常在 spring 框架中,当 spring 容器加载 XML 配置文件时,所有 bean 都会立即启动。假设在您的应用程序中出现这样一种情况,您不希望在将 XML 加载到容器中后立即初始化某些 bean,或者换句话说,您希望它在运行时加载它,在这种情况下,您可以提供属性 lazy-init =“真”。

您可以在此处查看示例

于 2017-11-24T15:25:40.147 回答