学习记录(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)注入,否则按类型注入

    具体情况可以点这里查看

 

posted @ 2015-12-09 15:07  在修行  阅读(294)  评论(1编辑  收藏  举报