• Spring一些疑惑点学习


    1、Spring  contextConfigLocation配置

    如果是 <context-param>标签内的,如果没有提供值,默认会去/WEB-INF/config/applicationContext.xml

     <!-- avalible during applicatio -->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/config/applicationContext.xml</param-value>
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>

    如果是 <init-param>标签内的,如果没有提供值,默认会去找/WEB-INF/*-servlet.xml

     <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!-- 配置SpringMVC 需要配置的文件
            spring-dao.xml,spring-service.xml,spring-web.xml
            Mybites -> spring -> springMvc  -->
            <!--avalible in servlet init()-->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:/spring/spring-*.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>

    2、spring配置注解context:annotation-config和context:component-scan、以及<mvc:annotation-driven>

    (1)context:annotation-config的作用

    < context:annotation-config>的作用是用于激活那些已经在spring容器里注册过的bean上面的注解,也就是显示的向spring注册下面这四个Processor

    AutowiredAnnotationBeanPostProcessor
    CommonAnnotationBeanPostProcessor
    PersistenceAnnotationBeanPostProcessor
    RequiredAnnotationBeanPostProcessor

    比如我们要使用@Autowired注解,那么就必须事先在spring容器里声明一个AutowiredAnnotationBeanPostProcessor的Bean,传统的声明方式如下:

    <bean class="org.springframework.beans.factory.annotation. AutowiredAnnotationBeanPostProcessor "/>

    同理@ Resource 、@ PostConstruct、@ PreDestroy等注解就必须声明CommonAnnotationBeanPostProcessor

    如果想使用@PersistenceContext注解,就必须声明PersistenceAnnotationBeanPostProcessor的Bean

    如果想使用 @Required的注解,就必须声明RequiredAnnotationBeanPostProcessor的Bean

    但是这里需要注意一下单纯使用< context:annotation-config/>并没有激活@Component、@Controller、@Service等这些注解

    (2)context:component-scan的作用

    <context:component-scan base-package=”XX.XX”/> 

    该配置项其实也包含了context:annotation-config自动注入的四个processor 的功能,因此当使用 < context:component-scan/> 后,就可以将 < context:annotation-config/> 移除了。 

    除此之外,还具有自动将带有@component,@service,@Repository等注解的对象注册到spring容器中的功能。

    (3)如果同时使用context:annotation-config和context:component-scan?

    因为< context:annotation-config />和 < context:component-scan>同时存在的时候,前者会被忽略。如@autowire,@resource等注入注解只会被注入一次!

    (4)<mvc:annotation-driven>的作用

    < mvc:annotation-driven /> 是一种简写形式。< mvc:annotation-driven/>主要为了Spring MVC用的,提供Controller请求转发,json自动转换等功能。会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean。是spring MVC为@Controllers分发请求所必须的。 
    并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)。

  • 相关阅读:
    continue与break
    while循环
    获取数组元素
    函数的声明和调用
    匿名函数与自调用函数
    Supervisor离线安装及使用
    C++串口通讯解决方案
    C#项目管理引用的dll文件
    MFC自定义CStatusBar文字的颜色
    简单实用的批处理脚本
  • 原文地址:https://www.cnblogs.com/wylwyl/p/13304550.html
Copyright © 2020-2023  润新知