Можно ли добавить объект Java с помощью Spring без каких-либо файлов конфигурации xml?

Я хочу ввести простой Java-объект, используя Spring программно, без использования какой-либо конфигурации xml. Хотите ввести поля/методы, аннотированные тегами Как @EJB, @PostConstruct и т.д. Возможно ли это? Спасибо!

Ответы

Ответ 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.