• spring注解的相关配置


    一、<context:annotation-config> 和 <context:component-scan>

    <context:annotation-config>的作用:将已经在spring容器中注册的bean激活。实际含义是,使注解能使用已经在spring容器中注册的过的bean,不论是通过xml配置和通过包扫描注册的bean,都包含在内。

    <context:component-scan>的作用:在<context:annotation-config>的基础上,可以扫描指定包,将包含注解的类注册到spring容器中。如:<context:component-scan base-package="ki"/>。

    二、<mvc:annotation-driven>

    <mvc:annotation-driven>会自动注册RequestMappingHandlerMapping与RequestMappingHandlerAdapter两个Bean,这是Spring MVC为@Controller分发请求所必需的,并且提供了数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持读写XML的支持(JAXB)和读写JSON的支持(默认Jackson)等功能。

    我们找到对应的实现类是:

    org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser.
    通过阅读类注释文档,我们发现这个类主要是用来向工厂中注册了

    RequestMappingHandlerMapping
    BeanNameUrlHandlerMapping
    RequestMappingHandlerAdapter
    HttpRequestHandlerAdapter
    SimpleControllerHandlerAdapter
    ExceptionHandlerExceptionResolver
    ResponseStatusExceptionResolver
    DefaultHandlerExceptionResolver

    上面几个Bean实例.这几个类都是用来做什么的呢?

    前两个是HandlerMapping接口的实现类,用来处理请求映射的.

    • 其中第一个是处理@RequestMapping注解的.
    • 第二个会将controller类的名字映射为请求url.

    中间三个是用来处理请求的.具体点说就是确定调用哪个controller的哪个方法来处理当前请求.

    • 第一个处理@Controller注解的处理器,支持自定义方法参数和返回值(很酷).
    • 第二个是处理继承HttpRequestHandler的处理器.
    • 第三个处理继承自Controller接口的处理器.

    后面三个是用来处理异常的解析器.

    另外还将提供以下支持:
    ① 支持使用ConversionService实例对表单参数进行类型转换; 
    ② 支持使用@NumberFormatannotation,@DateTimeFormat注解完成数据类型的格式化; 
    ③ 支持使用@Valid注解对Java bean实例进行JSR 303验证; 
    ④ 支持使用@RequestBody和@ResponseBody注解

    三、<mvc:default-servlet-handler />和<mvc:resources />

    这两个注解都是用来处理静态资源的,其实不使用它们也可以访问静态资源,那么使用这两个注解的意义是什么。

    这其实是书写规范的问题,其强调HTTP应当以资源为中心,并且规范了URI的风格,这种书写规范不希望待.html或.do等后缀,但是早期的Spring MVC不能很好的处理静态资源,所以在请求映射里,不会使用/,而通常使用*.do等的方式。

    所以为了,规范,为了使用/的请求映射,新加了这两个功能。

    当使用*.do的后缀时,spring在找不到相应的映射处理时,会按照请求路径查找静态资源路径。但是,在使用/的映射处理时,spring容器会将所有的请求当成映射路径,不回去查找资源文件,处理这种情况,就用到了这两个注解。

    1、<mvc:default-servlet-handler />

    在springMVC-servlet.xml中配置<mvc:default-servlet-handler />后,会在Spring MVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理。

    一般Web应用服务器默认的Servlet名称是"default",因此DefaultServletHttpRequestHandler可以找到它。如果你所有的Web应用服务器的默认Servlet名称不是"default",则需要通过default-servlet-name属性显示指定:

    <mvc:default-servlet-handler default-servlet-name="所使用的Web服务器默认使用的Servlet名称" />

    2、<mvc:resources />

    <mvc:default-servlet-handler />将静态资源的处理经由Spring MVC框架交回Web应用服务器处理。而<mvc:resources />更进一步,由Spring MVC框架自己处理静态资源,并添加一些有用的附加值功能。

    <mvc:resources />通过location和mapping参数,可以访问项目中的任何一处静态资源。

    <mvc:resources location="/,/css/,/WEB-INF/classes/,/WEB-INF/classes/,classpath:/" mapping="/resources/**/"/>

    location属性:项目内的文件路径(部署后的路径),其中classpath:/等同于/WEB-INF/classes/。

    mapping属性:将项目内的实际路径,映射到的一个虚拟的用于请求静态资源的路径。

    注意:每个location路径只能报该文件夹下的资源文件映射到mapping,如:/只能映射项目根目录下的资源文件,而不能映射跟目录下的css文件夹下的目录,必须新加一个/css/的配置。

    配置完成后,当要请求静态资源路径时:

    例如 ,在跟目录径下的css文件夹下有个style.css,那么请求路径就是:http://localhost:8080/ssm-login/resources/style.css

    即使是WEB-INF下的文件,也可以得到,WEB-INF下的login.jsp的请求路径:http://localhost:8080/ssm-login/resources/login.jsp

     四、 <tx:annotation-driven transaction-manager="" />

     含义为:支持使用注解来进行实物管理,并指定一个事务管理器。

    <util:properties id="cfg" location="classpath:config.properties"/>  
       <!--配置DruidDataSource连接池 -->
       <bean id="ds" class="com.alibaba.druid.pool.DruidDataSource"
            destroy-method="close" init-method="init" lazy-init="true">
            <property name="driverClassName" value="#{cfg.driver}" />
            <property name="url" value="#{cfg.url}" />
            <property name="username" value="#{cfg.username}" />
            <property name="password" value="#{cfg.password}" />
            <!-- 初始化连接大小 -->
            <property name="initialSize" value="#{cfg.initialSize}" />
            <!-- 连接池最大数量 -->
            <property name="maxActive" value="#{cfg.maxActive}" />
            <!-- 连接池最小空闲 -->
            <property name="minIdle" value="#{cfg.minIdle}" />
            <!-- 获取连接最大等待时间 -->
            <property name="maxWait" value="#{cfg.maxWait}" />
         </bean>
    
    <!--     事务管理器   -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
            <property name="dataSource" ref="ds" />  
        </bean> 
    <!-- 支持使用注解来进行事务管理 -->
        <tx:annotation-driven transaction-manager="transactionManager" />   
    就算这个世道烂成一堆粪坑,那也不是你吃屎的理由
  • 相关阅读:
    vfork与fork的区别
    常见的六种设计模式以及应用场景
    Java中常见的集合类比较
    排序——总结
    排序——交换排序
    排序——选择排序
    排序——归并排序
    排序——基数排序
    排序——插入排序
    设计模式
  • 原文地址:https://www.cnblogs.com/whalesea/p/10517266.html
Copyright © 2020-2023  润新知