• 学习记录(1) 基本配置


    一、Spring的认识

      Spring是一个开发框架,而框架最主要的目的是为我们开发提供便利。将与业务逻辑无关的、较为通用的东西提取出来。而我们只需要将视线放到业务逻辑的处理上即可。

      Spring有几个基础概念:控制反转(IOC)、面向切面编程(AOP)等

      控制反转:将类间的依赖关系交给IOC容器管理,简单来说就是把平时new Service()这种代码交给Spring来做,我们只要用它new出来的对象即可。

      依赖注入:Spring将new出来的对象注入到被注入对象中。

      面向切面编程:对面向对象编程(OOP)的补充。常用的拦截器本质上就是AOP。

    下面是Spring框架图,大概预览下。以后用到慢慢理解。

    大概看下就行,以后慢慢用到才能理解

    二、Spring配置过程

      Spring的核心是DispatcherServlet,它本质上是一个Servlet。根据url-pattern拦截到请求后,转到这个Servlet中进行处理。

      由此知道过滤器、拦截器、controller(action)的执行过程:

      filter->interceptor->action->interceptor->filter

      如果配置了切面方法的话,切面方法在哪一步执行呢?待测试

      (1)web.xml

        Spring本质是Servlet,所以第一步是在Web.xml中配置DispatcherServlet.

      ps.这里简要说下“父子容器”的概念。Servlet可以定义多个,每个定义的DispatcherServlet都有一个自己的上下文(applicationContext),有时可能需要相互交互、或者同时调用了同一个bean。此时可以使用监听器读取一个配置文件作为父容器。不过一般情况下只要使用一个servlet就可以了。

    <!-- 监听器读取的配置文件位置 -->
    <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/daoContext.xml /WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <!-- 监听器的启动早于servlet,所以可以在子容器中读取这里(父容器)的bean,但反之则不然 -->
    <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!-- Spring最根本的入口在这个servlet -->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 定义配置文件的位置,可以匹配多个,正则 -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext*.xml</param-value>
        </init-param>
        <!-- 自启动,启动tomcat时自动加载配置文件,会自动加载配置中的bean,除非将bean设置为懒加载 -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <!-- 
        映射规则,以.do结尾的请求都会映射到这个servlet,由spring处理
        ps.配置格式有很多种,这种最方便,不会拦截掉静态文件,不过每次访问的时候需要在url之后加上.do。其他的之后再说。 
      --> <url-pattern>*.do</url-pattern> </servlet-mapping>

      (2.1)applicationContext.xml(使用配置)

      

    <!-- 大致形式:
        <beans>
            <bean/>
        </beans>
    -->
    <!-- 读取配置文件方式:
        <context:property-placeholder location="classpath:conf.properties"
            ignore-unresolvable="true" />
        使用方式:
            ${config.key}
    -->
    <beans>
    <!-- id是唯一的,不可重复;
    name作为bean的别名,可以重复,且可以设置多个:name="name1,name2,name3" 用逗号隔开,但强烈不建议使用name;
    id或name都可以用getBean获取;
    如果都没指定,则可以用全类名获取
    -->
        <bean id="id" name="name" class="com.thunder.custom.CustomClass"/>
    </beans>

      (2.2)applicationContext.xml(使用注解)

      

    <!-- 指定Spring IOC 容器扫描的包 -->
      <!-- 可以通过resource-pattern指定扫描的资源 -->
      <!-- <context:component-scan base-package="com.coslay.beans.annotation"
        resource-pattern="reporsitory/*.class"> -->
      
      <!-- 
        context:exclude-filter 子节点指定排除哪些指定表达式的组件
        context:include-filter 子节点指定包含哪些表达式的组件,该子节点需要use-default-filters="false"配合使用,默认为true
      (如果use-default-filters="ture",则使用系统默认扫描所有带有@Component@Controller@Service@Repository的组件)
    -->
    <!-- 接下来都实用注解 -->
    <context:component-scan base-package="com.coslay.beans.annotation"> </context:component-scan>

      具体的配置节点:http://book.51cto.com/art/201004/193743.htm

      (3)关于注入

      由spring容器将对象注入到bean里。也分为xml装配和annotation标注两种。

      xml配置就是在<bean>节点里配置<property name="valueName" value="value"/>

      annotaion则使用@Autowired或者@Resource

      @Autowired默认按类型注入,@Resource则是有name属性就按名字(id或name)注入,否则按类型注入

        具体情况可以点这里查看

  • 相关阅读:
    常用的清理 Kubernetes 集群命令
    mask彻底禁用systemctl服务
    ansibleplaybook指定role limit
    极速理解设计模式系列:16.迭代器模式(Iterator Pattern)
    极速理解设计模式系列:19.备忘录模式(Memento Pattern)
    极速理解设计模式系列:8.策略模式(Strategy Pattern)
    极速理解设计模式系列:6.适配器模式(Adapter Pattern)
    PostSharp AOP编程:2.PostSharp的OnMethodBoundaryAspect类基本组成
    极速理解设计模式系列:18.访问者模式(Visitor Pattern)
    极速理解设计模式系列:10.抽象工厂模式(Abstract Factory Pattern)
  • 原文地址:https://www.cnblogs.com/zaixiuxing/p/5032885.html
Copyright © 2020-2023  润新知