Как эти классы вводятся в мой класс контроллера Spring?

Я новичок в весне, и у меня есть некоторые сомнения по поводу того, как вводить некоторые классы в класс контроллера.

В моем проекте у меня есть класс HomeController:

@Controller
public class HomeController {

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
    @Autowired
    private MessageSource  messageSource;
    @Autowired
    private Environment env;

    .....................................................
    .....................................................
    .....................................................
}

Мои сомнения связаны с 2 объектами MessageSource, messageSource и Environment env.

Как видите, эти классы внедряются аннотацией @Autowired.

Проблема в том, что у меня нет определения компонента в моей конфигурации XML для этих классов. Так почему правильно вводится? Где определение этих бобов?

Tnx

3 ответа

Решение

Автоматическое обнаружение bean-компонентов основано на следующих правилах:

1) Используйте тег context:annotation-config в spring-config.xml, чтобы Spring мог использовать аннотации
2) Используйте context:component-scan tag в spring-config.xml и сообщите Spring пакет, в котором нужно искать автообнаружение bean-компонентов
3) Используйте аннотацию @Component, чтобы пометить класс как бин Spring с автоматическим обнаружением

Если @Component annotation при этом объявления бинов не нужно объявлять в spring-config.xml

Весенние сопоставления могут быть сделаны с XML или с аннотациями.

В вашем случае, если XML не определен, ваш MessageSource а также Environment классы должны отображаться аннотациями Spring, такими как @Component@Service или же @Resource:

@Component

Указывает, что аннотированный класс является "компонентом". Такие классы рассматриваются как кандидаты для автоматического обнаружения при использовании конфигурации на основе аннотаций и сканирования пути к классам.

@Autowired

Аннотация @Autowired попытается найти компонент типа Foo в контексте Spring, а затем внедрит его.

@Resource

Подобным образом является аннотация @Resource, которая попытается найти компонент с именем "foo". Подводя итог, @Autowired проводов по типу и @Resource проводов по имени.

И Среда, и Источник сообщений тесно связаны с внутренней работой Spring Framework.

Среда является частью контекста приложения и будет доступна для автоматического подключения.

Интерфейс ApplicationContext расширяет интерфейс MessageSource и будет доступен для автоматического подключения в качестве источника сообщений, даже если вы не определили свой собственный компонент источника сообщений. (Если вы определите свой собственный источник сообщений, контекст приложения будет делегирован этому)

Другие вопросы по тегам