SpringでBeanを具体的にロードする方法はありますか?Spring beanをロードする
私はたくさんの豆を持つappContextファイルを持っています。 次のコードを使用してロードすると、すべてのBeanが再度ロードされます。
BeanFactory factory = new ClassPathXmlApplicationContext("appContext.xml");
SpringでBeanを具体的にロードする方法はありますか?Spring beanをロードする
私はたくさんの豆を持つappContextファイルを持っています。 次のコードを使用してロードすると、すべてのBeanが再度ロードされます。
BeanFactory factory = new ClassPathXmlApplicationContext("appContext.xml");
何ApplicationContextAware
の使用について:
もう一つの方法は、default-lazy-init
属性を使って豆を宣言するのですか?
豆マッピング
<bean id="springApplicationContext" class="SpringApplicationContext"/>
Java実装
public class SpringApplicationContext implements ApplicationContextAware {
private static ApplicationContext CONTEXT;
public void setApplicationContext(ApplicationContext ctx) throws BeansException {
CONTEXT = ctx;
}
public static Object getBean(String name) {
return CONTEXT.getBean(name);
}
}
次に、このようにそれを使用します。
SpringApplicationContext.getBean("myBean");
これは、EJB層などからレガシーコードからSpring Beanを呼び出す場合にも便利です。 – atrain
デフォルトでは、起動時にすべてのsingleton
スコープBeanのインスタンスが作成されます。
いくつかの異なるファイルでスプリング設定を分割することをお勧めします。その場合、タスクに必要なBeanのグループだけをロードすることができます。
<beans default-lazy-init="true">
<!-- no beans will be pre-instantiated... -->
</beans>
あなたはApplicationContextAwareインタフェースを使用することができます。 example
このBeanのインスタンスを取得すると、必要なBeanをロードできます。
1つの方法は、石英のスプリング抽象化を使用する方法です。そうすれば、あなたの石英の "仕事"は最初から春の豆です。
続きを読むhere。
これは、スプリングコンテキストを再作成する必要がないようにするのに役立ちます。
Spring to configure the quartz jobを使用すると、ジョブから直接スプリングビーンを参照できます。
たとえば、MethodInvokingJobDetailFactoryBeanを使用する場合は、コードを実行するBeanを作成して、DAOを呼び出すことができます。
<bean id="exampleBusinessObject" class="my.pkg.BusinessObject">
<property name="dao" ref="myDao" />
</bean>
<bean id="exampleJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="exampleBusinessObject"/>
<property name="targetMethod" value="doIt"/>
</bean>
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="exampleJob" />
<!-- run every 30 min -->
<property name="cronExpression" value="0 0/30 * * * ?" />
</bean>
なぜコンテキストを再作成しますか? – beny23
私はquartzジョブクラスに属しており、そこにはdaoクラスを呼び出すBeanオブジェクトが必要です(アプリケーションはTomcatサーバーで実行され、このクラスは30分ごとに実行されます) – Joe