Как эти классы вводятся в мой класс контроллера 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 и будет доступен для автоматического подключения в качестве источника сообщений, даже если вы не определили свой собственный компонент источника сообщений. (Если вы определите свой собственный источник сообщений, контекст приложения будет делегирован этому)