我讀了以下問題上JIRA:如何調用春代理方法一次初始化
https://jira.springsource.org/browse/SPR-2740
基本上,我想我的春天MVC應用程序從數據庫加載在初始化一些數據。由於init方法/ @Preconstruct在任何AOP代理完成之前被調用,所以沒有應用事務通知。
是否有一個優雅的模式可以遵循,所以一旦代理已經發生我可以配置類似於init方法的東西?
我讀了以下問題上JIRA:如何調用春代理方法一次初始化
https://jira.springsource.org/browse/SPR-2740
基本上,我想我的春天MVC應用程序從數據庫加載在初始化一些數據。由於init方法/ @Preconstruct在任何AOP代理完成之前被調用,所以沒有應用事務通知。
是否有一個優雅的模式可以遵循,所以一旦代理已經發生我可以配置類似於init方法的東西?
如果您只需要此單一初始化點的自動裝配資源,您可以簡單地@Autowire一種具有所需資源的方法。
@Autowired
public void initialized(Database database){
resources = resource.loadDatabaseRecources();
}
這將Database
後的數據庫實例自動裝配這種方法完成初始化。
解決方法簡單而優雅。
從數據庫中提取數據加載到單獨的事務性方法不同類。然後注入該類並在@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單獨的類可能根據你的架構,這是一個好主意。