您的位置:

annotation-driven的详细阐述

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
   > 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中常见的注解,从而让开发更加简单、快捷。