Spring框架的基本配置

Spring的IOC和AOP概念

IOC

控制反转不是什么技术,而是一种设计思想。
传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IOC是有专门一个容器来创建这些对象,即由IOC容器来控制对象的创建。
因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转,依赖对象的获取被反转了。

AOP

Spring AOP(面向方面编程)框架,用于在模块化方面的横切关注点。简单得说,它只是一个拦截器拦截一些过程,例如,当一个方法执行,Spring AOP 可以劫持一个执行的方法,在方法执行之前或之后添加额外的功能。
在Spring AOP中,有 4 种类型通知(advices)的支持:
通知(Advice)之前 - 该方法执行前运行
通知(Advice)返回之后 – 运行后,该方法返回一个结果
通知(Advice)抛出之后 – 运行方法抛出异常后,
环绕通知 – 环绕方法执行运行,结合以上这三个通知。

一、建立工程

首先用eclipse创建一个web项目。新建一个工程,选择Dynamic Web Proect。
建立工程后会自动引用JDK和Tomcat的jar包。把Spring的jar包拷贝到WebContent/WEB-INF/lib文件夹下,系统会自动引用改文件夹下的jar包。

二、建立Spring的配置文件

项目src目录下新建一个Spring的applicationContext.xml配置文件,文件内容模版如下:

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:aop="http://www.springframework.org/schema/aop"  
    xmlns:tx="http://www.springframework.org/schema/tx" 
xmlns:context="http://www.springframework.org/schema/context"  
    xsi:schemaLocation="  
        http://www.springframework.org/schema/beans  
        http://www.springframework.org/schema/beans/spring-beans-4.1.xsd          
        http://www.springframework.org/schema/aop           
        http://www.springframework.org/schema/aop/spring-aop-4.1.xsd          
        http://www.springframework.org/schema/context           
        http://www.springframework.org/schema/context/spring-context-4.1.xsd          
        http://www.springframework.org/schema/tx           
        http://www.springframework.org/schema/tx/spring-tx-4.1.xsd  
        http://www.springframework.org/schema/cache 
        http://www.springframework.org/schema/cache/spring-cache-4.1.xsd">  

<!-- 将多个配置文件读取到容器中,交给Spring管理 -->
<bean id="propertyConfigurer"
 class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath:global.properties</value>
            <value>classpath:jdbc.properties</value>
        </list>
    </property>
</bean>

<!-- 扫描类包,将标注Spring注解的类自动转化Bean,同时完成Bean的注入 -->
<context:component-scan base-package="cn.my.common" />
<context:component-scan base-package="cn.my.service" />
<context:component-scan base-package="cn.my.dao" />
  
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
        <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8" />  
        <property name="username" value="test" />  
        <property name="password" value="test" />  
        <property name="maxActive" value="100" />  
        <property name="maxIdle" value="30" />  
        <property name="maxWait" value="1000" />  
        <property name="defaultAutoCommit" value="true" />  
        <property name="removeAbandoned" value="true" />  
        <property name="removeAbandonedTimeout" value="60" />  
    </bean>  

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">    
        <property name = "dataSource" ref="dataSource"/>    
    </bean>   
  
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
        <property name="dataSource" ref="dataSource"/>  
    </bean>  
    <tx:annotation-driven transaction-manager="txManager"/>  
      
    <bean id="persistenceExceptionTranslationPostProcessor"   
       class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />  
</beans>  

我们可以在beans标签里添加bean标签等。

三、建立springservlet-config.xml配置文件

文件内容模版如下:

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xmlns:p="http://www.springframework.org/schema/p"   
  xmlns:context="http://www.springframework.org/schema/context"  
  xmlns:util="http://www.springframework.org/schema/util"  
  xmlns:mvc="http://www.springframework.org/schema/mvc"  
  xmlns:tx="http://www.springframework.org/schema/tx"  
  xsi:schemaLocation="  
      http://www.springframework.org/schema/beans  
      http://www.springframework.org/schema/beans/spring-beans.xsd  
      http://www.springframework.org/schema/util  
      http://www.springframework.org/schema/util/spring-util.xsd  
      http://www.springframework.org/schema/context   
      http://www.springframework.org/schema/context/spring-context.xsd  
      http://www.springframework.org/schema/mvc  
      http://www.springframework.org/schema/mvc/spring-mvc.xsd  
      http://www.springframework.org/schema/tx           
      http://www.springframework.org/schema/tx/spring-tx-4.1.xsd" >  
   
  
    <!-- 使用默认的注解映射 -->   
    <mvc:annotation-driven/>  
  
    <!-- 自动扫描controller包中的控制器 -->  
    <context:component-scan base-package="springMVC"/>  
    <!-- 基于注释的事务,当注释中发现@Transactional时,使用id为“txManager”的事务管理器  -->  
    <tx:annotation-driven transaction-manager="txManager"/>  
   <bean  
        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
        <property name="messageConverters">  
            <util:list id="beanList">  
                <ref bean="stringHttpMessageConverter" />  
                <ref bean="mappingJacksonHttpMessageConverter" />  
            </util:list>  
        </property>  
    </bean>  
    <bean id="stringHttpMessageConverter"  
        class="org.springframework.http.converter.StringHttpMessageConverter" />  
    <bean id="mappingJacksonHttpMessageConverter"  
        class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />  
  
    <bean id="multipartResolver"  
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
        <property name="maxUploadSize" value="50000000" />  
        <property name="defaultEncoding" value="UTF-8" />  
    </bean>  
  
    <bean  
        class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">  
        <property name="mediaTypes">  
            <map>  
                <entry key="json" value="application/json" />  
                <entry key="html" value="text/html" />  
                <entry key="file" value="application/octet-stream" />  
                <entry key="apk" value="application/octet-stream"/>  
            </map>  
        </property>  
        <property name="viewResolvers">  
            <list>  
                <bean  
                    class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
                    <property name="prefix" value="/WEB-INF/pages/" />  
                    <property name="suffix" value=".jsp" />  
                </bean>  
            </list>  
        </property>  
        <property name="defaultViews">  
            <list>  
                <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />  
            </list>  
        </property>  
    </bean>  
</beans> 

说明:

    <!-- InternalResourceViewResolver-内部资源视图解析器 
        ControllerClassNameHandlerMapping-控制器类名处理映射
        SimpleUrlHandlerMapping-简单URL处理程序映射
    -->
    <!-- 用控制器类名称处理映射,BookAction不需要用@注解,需继承AbstractController类,
实现protected ModelAndView handleRequestInternal(HttpServletRequestrequest, 
HttpServletResponseresponse)throws Exception{}方法

    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>

   <bean class="com.test.controller.BookAction" />
   -->
   <!--  用简单URL处理程序映射,BookAction不需要用@注解,需继承AbstractController类,实现protected ModelAndView handleRequestInternal(HttpServletRequestrequest, 
HttpServletResponseresponse)throws Exception{}方法
   <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
      <property name="mappings">
         <props>
            <prop key="/book_1.jsp">bookAction</prop>           
         </props>
      </property>
   </bean>

   <bean id="bookAction" class="com.test.controller.BookAction" />
   -->
   <!--  
   可在applicationContext.xml增加自动扫描,
   <context:component-scanbase-package="com.test.controller"></context:component-scan>
    -->
    
    <!-- 加这个标签,可以访问html文件 <mvc:default-servlet-handler/> 需加<mvc:annotation-driven />才能使用control -->

四、建立web.xml配置文件

文件内容模版如下:

<?xml version="1.0" encoding="UTF-8"?>  
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  
  <display-name>springMVC</display-name>  
  <!-- spring MVC配置 -->        
    <servlet>  
        <servlet-name>springMVC</servlet-name>  
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
        <init-param>  
            <param-name>contextConfigLocation</param-name>  
            <param-value>classpath:springservlet-config.xml</param-value>  
        </init-param>        
        <load-on-startup>1</load-on-startup>  
    </servlet>  
    <!-- 载入spring -->   
    <context-param>   
        <param-name>contextConfigLocation</param-name>   
        <param-value>classpath*:applicationContext.xml</param-value>   
    </context-param>   
    <listener>  
        <listener-class>  
            org.springframework.web.context.ContextLoaderListener  
        </listener-class>  
    </listener>  
    <servlet-mapping>   
        <servlet-name>springMVC</servlet-name>   
        <url-pattern>/client/*</url-pattern>  
    </servlet-mapping>  
       
    <!-- 配置post表单编码格式(避免中文乱码) -->  
    <filter>  
        <filter-name>CharacterEncodingFilter</filter-name>  
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
        <init-param>  
            <param-name>encoding</param-name>  
            <param-value>utf-8</param-value>  
        </init-param>  
    </filter>  
    <filter-mapping>  
        <filter-name>CharacterEncodingFilter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
</web-app>  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容