如何让Spring在bean初始化的时候执行一个方法?
How to get Spring to execute a method when the bean is initialized?
我正在使用 Spring 3.2.11.RELEASE。我有一个 class(用 @Service
注释),其中我有一个方法
package org.mainco.subco.myproject.service;
…
@PostConstruct
public void initCaches()
{
LOG.info("initiating caches.");
…
} // initCaches
然而,此方法永远不会被调用,尽管服务 class 包含在 <context:component-scan />
中。我的应用程序上下文文件中有这个……
<context:component-scan base-package="org.mainco.subco" />
当我的 bean 为 created/initialized 时,如何获取要执行的方法?我不在乎它是否 @PostConstruct
,如果我需要另一种方式或注释。那。关键是该方法可以访问自动装配的 Spring bean。
您可以使用 Spring 的 aop
(Aspect Orientation) 功能吗?
<aop:config>
<aop:aspect ref="service">
<aop:pointcut id="myotherbeans"
expression="execution(* package.name.myotherbeans.initializers(...))"
/>
<aop:before
pointcut-ref="myotherbeans"
method="initCaches"
/>
</aop:aspect>
</aop:config>
您需要包括 xmlns:aop="http://www.springframework.org/schema/aop
我所做的是实现 "InitializingBean " 接口 ...
implements InitializingBean
重写 "afterPropertiesSet" 方法解决了我的问题。
我正在使用 Spring 3.2.11.RELEASE。我有一个 class(用 @Service
注释),其中我有一个方法
package org.mainco.subco.myproject.service;
…
@PostConstruct
public void initCaches()
{
LOG.info("initiating caches.");
…
} // initCaches
然而,此方法永远不会被调用,尽管服务 class 包含在 <context:component-scan />
中。我的应用程序上下文文件中有这个……
<context:component-scan base-package="org.mainco.subco" />
当我的 bean 为 created/initialized 时,如何获取要执行的方法?我不在乎它是否 @PostConstruct
,如果我需要另一种方式或注释。那。关键是该方法可以访问自动装配的 Spring bean。
您可以使用 Spring 的 aop
(Aspect Orientation) 功能吗?
<aop:config>
<aop:aspect ref="service">
<aop:pointcut id="myotherbeans"
expression="execution(* package.name.myotherbeans.initializers(...))"
/>
<aop:before
pointcut-ref="myotherbeans"
method="initCaches"
/>
</aop:aspect>
</aop:config>
您需要包括 xmlns:aop="http://www.springframework.org/schema/aop
我所做的是实现 "InitializingBean " 接口 ...
implements InitializingBean
重写 "afterPropertiesSet" 方法解决了我的问题。