annotation-driven是Spring框架中的一個特性,它的作用廣泛,使用靈活,本文將從多個方面對其進行詳細闡述。
一、annotation-driven概述
annotation-driven是Spring框架中的一個註解,它是指示Spring對特定註解進行處理的標識。使用annotation-driven可以讓Spring自動的處理一些常見的註解,從而簡化開發,提高效率。
在Spring 2.5版本以前,我們需要通過配置文件來告訴Spring框架需要掃描哪些註解。而在Spring 2.5版本之後,我們可以使用annotation-driven註解來告訴Spring框架進行註解的掃描和處理。
二、annotation-driven作用
1、自動註冊常用的BeanPostProcessor實現類
annotation-driven能夠自動註冊常用的BeanPostProcessor實現類,如AutowiredAnnotationBeanPostProcessor、RequiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor等。
其中,AutowiredAnnotationBeanPostProcessor能根據@Autowired註解自動裝配bean,RequiredAnnotationBeanPostProcessor則能夠檢查使用了@Required註解的方法和屬性是否有被注入值,如果沒有則拋出異常。而CommonAnnotationBeanPostProcessor能夠處理Java EE 5規範中的註解,如@Resource、@PostConstruct、@PreDestroy等。
2、自動註冊常用的Converter實現類
annotation-driven能夠自動註冊常用的Converter實現類,如StringToArrayConverter、StringToCollectionConverter、StringToBooleanConverter、StringToEnumConverter等。
這些Converter實現類能夠將字符串類型轉換為其他類型的值,如數組、集合、布爾類型、枚舉等。使用這些Converter可以減少手動轉換的複雜性。
3、自動註冊常用的Validator實現類
annotation-driven能夠自動註冊常用的Validator實現類,如HibernateValidator、SpringValidator、JodaTimeValidator等。
這些Validator能夠校驗Bean中的值是否符合某些規則,如是否為空、長度是否符合要求、格式是否正確等。使用這些Validator可以方便地進行數據校驗。
4、自動註冊常用的MessageConverter實現類
annotation-driven能夠自動註冊常用的MessageConverter實現類,如MappingJacksonHttpMessageConverter、StringHttpMessageConverter、XmlAwareFormHttpMessageConverter等。
這些MessageConverter能夠將對象轉換為特定格式的數據,如JSON、XML、字符串等。使用這些MessageConverter可以方便地進行數據交互。
三、annotation-driven使用示例
下面是一個使用annotation-driven的示例:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"com.example.controller"})
public class AppConfig extends WebMvcConfigurerAdapter {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new StringToDateTimeConverter());
registry.addConverter(new DateTimeToStringConverter());
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new SampleInterceptor());
}
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource source = new ResourceBundleMessageSource();
source.setBasename("messages");
return source;
}
@Bean
public LocalValidatorFactoryBean validator() {
LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
validator.setValidationMessageSource(messageSource());
return validator;
}
@Override
public Validator getValidator() {
return validator();
}
@Override
public void configureMessageConverters(List<HttpMessageConverter> converters) {
converters.add(new MappingJackson2HttpMessageConverter());
converters.add(new StringHttpMessageConverter());
converters.add(new XmlAwareFormHttpMessageConverter());
}
@Bean
public AnnotationMethodHandlerAdapter annotationMethodHandlerAdapter() {
AnnotationMethodHandlerAdapter adapter = new AnnotationMethodHandlerAdapter();
adapter.setMessageConverters(new HttpMessageConverter[]{new MappingJackson2HttpMessageConverter()});
return adapter;
}
@Bean
public AnnotationHandlerMapping annotationHandlerMapping() {
AnnotationHandlerMapping mapping = new AnnotationHandlerMapping();
mapping.setInterceptors(new Object[]{new SampleInterceptor()});
return mapping;
}
}
在上面的代碼中,我們使用annotation-driven註冊了Converter、Validator、MessageConverter等實現類,還配置了攔截器、消息轉換器等許多相關組件。
正是因為有了annotation-driven的支持,我們可以更方便地使用Spring框架處理Java中常見的註解,從而讓開發更加簡單、快捷。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/288844.html
微信掃一掃
支付寶掃一掃