初始化后如何在spring代理上调用方法

时间:2012-01-31 16:13:27

标签: java spring spring-mvc

我在jira上阅读了以下问题:

https://jira.springsource.org/browse/SPR-2740

基本上,我希望我的spring MVC应用程序在初始化时从数据库加载一些数据。由于在完成任何AOP代理之前调用了init方法/ @Preconstruct,因此没有应用任何事务通知。

是否有一个优雅的模式,所以一旦代理发生,我可以配置类似于init方法的东西?

2 个答案:

答案 0 :(得分:2)

如果您只需要这个单一初始化点的自动装配资源,您可以简单地使用所需资源@Autowire方法。

@Autowired
public void initialized(Database database){
     resources =  resource.loadDatabaseRecources();
}

这将在Database完成初始化后将数据库实例自动装配到此方法。

答案 1 :(得分:1)

解决方法简单而优雅。

将数据库中的加载数据提取到不同类中的单独事务方法中。然后注入该类并在@PostConstruct中使用它。

所以而不是:

@Resource
private DataSource ds;

@PostConstruct
public void init() {
    ds...
}

你得到:

@Resource
private Dao dao;

@PostConstruct
public void init() {
    dao.readSomeStuff();
}

Dao的位置:

@Resource
private DataSource ds;

@Transactional
public Stuff readSomeStuff() {
    ds...
}

这引入了另一个间接层,但根据您的体系结构,提取DAO insto单独的类可能是一个好主意。