Я хочу ввести простой Java-объект, используя Spring программно, без использования какой-либо конфигурации xml. Хотите ввести поля/методы, аннотированные тегами Как @EJB
, @PostConstruct
и т.д. Возможно ли это? Спасибо!
Можно ли добавить объект Java с помощью Spring без каких-либо файлов конфигурации xml?
Ответ 1
Создание ApplicationContext без XML (с помощью AnnotationConfigApplicationContext)
С AnnotationConfigApplicationContext вам совсем не нужен какой-либо XML. Вы создаете контекст приложения программно и
a) вручную зарегистрировать аннотированные классы
appContext.register( MyTypeA.class,
MyTypeB.class,
MyTypeC.class );
b) или сканировать путь к классам для аннотированных классов
appContext.scan(
"com.mycompany.myproject.mypackagea",
"com.mycompany.myproject.mypackageb"
)
Если вы используете один из конструкторов удобства
AnnotationConfigApplicationContext (Class <? > ... annotatedClasses)
или
AnnotationConfigApplicationContext (String... basePackages)
контекст создается и обновляется автоматически, иначе вам нужно вызвать метод refresh() после добавления классов или пакетов.
Автосообщение существующего не Spring beans (с использованием AutowireCapableBeanFactory)
Для autowiring существующего bean я думаю, что предпочтительной идиомой является использование
appContext.getAutowireCapableBeanFactory().autowireBean(existingBean)
Или, если вы хотите большего контроля, используйте
appContext.getAutowireCapableBeanFactory()
.autowireBeanProperties(
existingBean,
autowireMode,
// e.g. AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE
dependencyCheck
)
Подробнее см.
Ответ 2
Да, вы можете аннотировать любое POJO с @Component
, @Service
, @Controller
или @Respository
(в зависимости от его обязанностей), и оно становится spring bean. Вам просто нужно поместить эту строку в applicationContext.xml
:
<context:component-scan base-package="org.yourbasepackage" />
Вы также можете использовать @PostConstruct
и @PreDestroy
вместо xml init-method
и destroy-method
.
Обновление: Существует проект под названием spring -javaconfig. Части его стали частью ядра spring, и вы можете увидеть подробнее здесь. Короче говоря, он позволяет вам использовать классы java вместо xml для настройки beans.
Ответ 3
Документацию вокруг конфигурации Spring на основе аннотаций можно найти здесь. Вам понадобится минимальное количество XML, так что Spring знает, как искать конфигурацию на основе аннотаций:
<context:component-scan base-package=".." />
Как только это будет сделано, вы можете использовать аннотацию @Autowired
для настройки beans.