2016-05-06 8 views
0

В явной форме определены бобы, можно определить инициализации и уничтожить методы с помощью аннотаций на классе конфигурации Spring:Как установить метод Init для фасоли автоматически созданных компоненты Сканирования весной

@Configuration 
@ComponentScan 
public class Appconfig { 
    @Bean(name="Andre",initMethod="init",destroyMethod="destroy") 
    @Scope("singleton") 
    public Person person() { 
     Person person = new Person(1,"Andre"); 
     person.setTaxId(5); 
     return person; 
    } 

Однако, если компонент автоматически создается весной через компонентное сканирование, как это сделать?

Я читал об этом, чтобы добиться такого же эффекта с помощью бобов, созданных при сканировании компонентов, метод init должен быть аннотирован с помощью @PostConstruct. Однако @PostConstruct не является частью Spring, и когда я использую эту аннотацию, у меня есть ошибка

«PostConstruct не может быть разрешен к типу».

Как-то, Eclipse, похоже, не знает, как автоматически импортировать эту аннотацию. После некоторого более просмотра я обнаружил, что с помощью

import javax.annotation.PostConstruct; 

работает, но с предупреждением говоря: ограничение

доступа: Тип «PostConstruct» не API (ограничение на требуемую библиотеку «C: \ Program Files \ Java \ jre1.8.0_45 \ Lib \ rt.jar ')

Так что у меня 2 вопроса:

  1. ли пружина имеет встроенный механизм для объявления инициализации и разрушающих методы компа onent отсканированные бобы?

  2. Почему у меня есть ошибка: Ограничение доступа: Тип «PostConstruct» не является API (ограничение на требуемую библиотеку «C: \ Program Files \ Java \ jre1.8.0_45 \ lib \ rt.jar»), когда используя @PostConstruct?

Заранее благодарен!

+0

вам нужно включить в конфигурацию весны, один из ответов дает понять, как можно сделать аннотации весной http://stackoverflow.com/questions/5919982/is-there- что-то типа-predestroy-в-весной-в-в-замок-Виндзорский – awsome

ответ

1

Вы можете реализовать интерфейс InitializingBean. Он объявляет метод afterPropertiesSet, который должен делать именно то, что вы хотите.

Spring Javadoc InitializingBean

J2EE - Spring эквиваленты

@PostConstruct - InitializingBean

@PreDestroy - DisposableBean

EDIT: Сортировать по понятого вопроса на первый. Создание интерфейса для Person, который расширяет InitializingBean или DisposableBean, внедряя объявленные методы afterPropertiesSet()/destroy() и изменяя тип возврата аннотированного метода @Bean на интерфейс, должен сделать трюк.