Ти можеш визначити біни контролера за допомогою стандартного визначення бінів Spring у WebApplicationContext
сервлету. Стереотип @Controller
дозволяє проводити автоматичне виявлення, що співвідноситься із загальною підтримкою Spring для виявлення класів, позначених анотацією @Component
, у classpath та автоматичній реєстрації визначень бінів для них. Він також діє як стереотип для анотованого класу, вказуючи на його роль як вебкомпонента.
Щоб активувати автоматичне виявлення таких бінів з анотацією @Controller
, можна додати сканування компонентів до конфігурації Java, як показано в наведеному нижче прикладі:
@Configuration
@ComponentScan("org.example.web")
public class WebConfig {
// ...
}
@Configuration
@ComponentScan("org.example.web")
class WebConfig {
// ...
}
У цьому прикладі показано XML-еквівалент конфігурації з попереднього прикладу:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="org.example.web"/>
<!-- ... -->
</beans>
@RestController
— це зіставна анотація, яка сама мета-анотується за допомогою анотацій @Controller
та @ResponseBody
для позначення контролера, кожен метод якого успадковує анотацію @ResponseBody
на рівні типів і, отже, здійснює запис безпосередньо в тіло відповіді замість розпізнавання подання та візуалізації за допомогою HTML-шаблону.
Проксі АОП
У деяких випадках може знадобитися декорувати контролер проксі АОП під час виконання. Наприклад, якщо ти вирішиш позначити анотаціями @Transactional
безпосередньо контролер. У таких випадках, зокрема для контролерів, рекомендуємо використовувати проксування на основі класів. Зазвичай це вибір за замовчуванням для контролерів. Однак якщо контролер повинен реалізувати інтерфейс, який не є зворотним викликом контексту Spring (наприклад, InitializingBean
, *Aware
та інші), може знадобитися явно налаштувати проксування на основі класу. Наприклад, при <tx:annotation-driven/>
можна змінити його на <tx:annotation-driven proxy-target-class="true"/>
, а при @EnableTransactionManagement
можна змінити його на @EnableTransactionManagement(proxyTargetClass = true)
.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ