Как вызвать метод на весеннем прокси после инициализации - PullRequest
2 голосов
/ 31 января 2012

Я прочитал следующую проблему на jira:

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

По сути, я хочу, чтобы мое весеннее приложение MVC загружало некоторые данные из базы данных при инициализации.Так как метод init / @Preconstruct вызывается до того, как выполняется прокси-сервер AOP, рекомендации по транзакциям не применяются.

Существует ли элегантный шаблон, которому нужно следовать, поэтому после прокси-сервера можно настроить что-то похожее на метод init

Ответы [ 2 ]

2 голосов
/ 31 января 2012

Если вам нужен только автосвязанный ресурс для этой единственной точки инициализации, вы можете просто @Autowire метод с необходимым ресурсом.

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

Это автоматически подключит экземпляр базы данных к этому методу после завершения инициализации Database.

1 голос
/ 31 января 2012

Обходной путь прост и элегантен.

Извлечение данных загрузки из базы данных в отдельный транзакционный метод в другом классе. Затем введите этот класс и используйте его в @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 в отдельные классы может быть хорошей идеей, в зависимости от вашей архитектуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...