context:annotation-config
在配置文件中配置:
<context:annotation-config/>
使用这个配置的作用:
开启注解
@Autowired 自动注入
@Resource 自动注入
@PostConstruct bean初始化之前
@PreDestroy bean销毁之后
@PersistenceContext 注入实体管理对象 JPA应用
@Required
…
基本上都是关于装配的注解。
使用<context:annotation-config/>
隐式地向Spring容器注册这4个BeanPostProcessor :
AutowiredAnnotationBeanPostProcessor
RequiredAnnotationBeanPostProcessor
CommonAnnotationBeanPostProcessor
PersistenceAnnotationBeanPostProcessor
上面的注解之所以能够起作用,就是因为这几个BeanPostProcessor:
- 当 Spring 容器启动时,它们扫描 Spring 容器中所有 Bean,当发现 Bean 中拥有特定的注解时就执行相应的操作
- 即是用来使上述注解起作用的,也就是说激活已经在applicationContext中注册的bean.
context:component-scan
配置文件中配置:
<context:component-scan base-package="com.sssp">
</context:component-scan>
<context:component-scan>
做了<context:annotation-config>
要做的事情,还额外开@Component,@Repository,@Service,@Controller注解.<context:component-scan>
扫描base-package指定的包下面的代码,在applicationcontext中注册扫描到的beans.- 即配置这个不仅开启自动装配注解的使用并且开启了注册bean的注解。
所以配置<context:component-scan>
就不需要配置<context:annotation-config/>
,比较常用。
关于注册bean的注解:
- @Component: 基本注解, 标识了一个受 Spring 管理的组件
- @Respository: 标识持久层(dao层)组件
- @Service:标识业务层(service层)组件
- @Controller: 标识表现层(控制器)组件
上面几个注解相当于配置文件中的<bean id="" class=""/>
mvc:annotation-driven
- 至于该项看前缀就应该知道是springmvc所需要的注解.
<mvc:annotation-driven/>
相当于注册了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean,虽然springmvc中会自动为我们开启这两个bean,但是如果自定义一些配置就需要添加了,一般不管需不需要都会添加。
配置一些messageconverter,为@Controller注解的使用提供前提条件.
主要是用来向工厂中注册了下面几个Bean实例:
RequestMappingHandlerMapping : 处理@RequestMapping注解
BeanNameUrlHandlerMapping :将controller类的名字映射为请求url.
RequestMappingHandlerAdapter
HttpRequestHandlerAdapter
SimpleControllerHandlerAdapter
ExceptionHandlerExceptionResolver
ResponseStatusExceptionResolver
DefaultHandlerExceptionResolver
前两个是HandlerMapping接口的实现类,用来处理请求映射的.
中间三个是用来处理请求的.具体点说就是确定调用哪个controller的哪个方法来处理当前请求.
第一个处理被@Controller注解的处理器,支持自定义方法参数和返回值.
第二个是处理继承HttpRequestHandler的处理器.
第三个处理继承自Controller接口的处理器.
后面三个是用来处理异常的解析器.
另外还将提供以下支持:
① 支持使用ConversionService实例对表单参数进行类型转换;
② 支持使用@NumberFormatannotation,@DateTimeFormat注解完成数据类型的格式化;
③ 支持使用@Valid注解对Java bean实例进行JSR 303验证;
④ 支持使用@RequestBody和@ResponseBody注解
简而言之就是<mvc:annotation-driven />
会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,
是spring MVC为@Controller分发请求所必须的。
并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)。
本系列参考视频教程: http://edu.51cto.com/course/1956.html