Spring'dagi WebApplicationContext servletida binlarni standart aniqlash orqali controller binlarni belgilash mumkin. @Controller stereotipi avtomatik aniqlashni amalga oshiradi, bu esa Spring anʼanaviy @Component annotatsiyasi bilan belgilangan sinflarni classpath'da aniqlash va ularni bin sifatida avtomatik ro'yxatga olishni qo'llab-quvvatlaydi. Bu, shuningdek, veb-komponent sifatida o'z rolini ko'rsatib, annotatsiyalangan sinf uchun stereotip sifatida ishlaydi.
@Controller annotatsiyasi bilan belgilangan binlarni avtomatik aniqlashni faollashtirish uchun quyidagi misolda ko'rsatilganidek, Java konfiguratsiyasiga komponentlarni skanerlashni qo'shish mumkin:
@Configuration
@ComponentScan("org.example.web")
public class WebConfig {
// ...
}
@Configuration
@ComponentScan("org.example.web")
class WebConfig {
// ...
}
Quyidagi misolda avvalgi misoldagi konfiguratsiyaning XML ekvivalenti ko'rsatilgan:
<?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 bu metaanotatsiya bo'lib, u @Controller va @ResponseBody annotatsiyalari bilan belgilangan. Har bir metodi @ResponseBody annotatsiyasini tip darajasida meros qilib oladi va natijada javobni to'g'ridan-to'g'ri HTML andozasiga vizualizatsiya qilish o'rniga tanaga yozib beradi.
AOP Proxy
Ba'zi hollarda kontrolerni AOP proxy orqali ishlatishda dekoratsiya qilish kerak bo'lishi mumkin. Masalan, agar siz controllerni @Transactional annotatsiyalar bilan belgilamoqchi bo'lsangiz. Bunday hollarda, ayniqsa controllerlar uchun, sinf asosida proksi qilishni tavsiya qilamiz. Bu controllerlar uchun odatiy tanlov. Biroq, agar controller Spring konteksining callback interfeysini (masalan, InitializingBean, *Aware va boshqalar) amalga oshirib qo'ymagan bo'lsa, sinfga asoslangan proksi aniq o'rnatilishi kerak. Masalan, <tx:annotation-driven/> ni <tx:annotation-driven proxy-target-class="true"/> ga yoki @EnableTransactionManagement ni @EnableTransactionManagement(proxyTargetClass = true) ga o'zgartirishingiz mumkin.
GO TO FULL VERSION