我在jira上阅读了以下问题:
https://jira.springsource.org/browse/SPR-2740
基本上,我希望我的spring MVC应用程序在初始化时从数据库加载一些数据。由于在完成任何AOP代理之前调用了init方法/ @Preconstruct,因此没有应用任何事务通知。
是否有一个优雅的模式,所以一旦代理发生,我可以配置类似于init方法的东西?
答案 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单独的类可能是一个好主意。