国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

基于spring-mvc.xml和application-context.xml配置的示例分

發(fā)布時(shí)間:2021-09-04 11:55 來(lái)源:億速云 閱讀:0 作者:小新 欄目: 開(kāi)發(fā)技術(shù)

這篇文章主要介紹了基于spring-mvc.xml和application-context.xml配置的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著(zhù)大家一起了解一下。

1、application-context.xml是全局的

應用于多個(gè)serverlet,配合listener一起使用,web.xml中配置如下:

<!-- 配置監聽(tīng)器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

2、spring-mvc.xml 是spring mvc的配置

web.xml中配置如下:

<!--配置springmvc DispatcherServlet-->
<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:config/spring-mvc.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
  <async-supported>true</async-supported>
</servlet>

application-context.xml這個(gè)一般是采用非spring mvc架構,用來(lái)加載Application Context。

如果直接采用SpringMVC,只需要把所有相關(guān)配置放到spring-mvc.xml中就好,一般spring mvc項目用不到多個(gè)serverlet。

開(kāi)始進(jìn)入正題。

(1)application-context.xml配置

spring的核心配置文件的名字 叫做 applicationContext.xml,后期也可以通過(guò)配置文件中的配置修改名稱(chēng),在web.xml中進(jìn)行如下配置:

1、首先介紹一下啟動(dòng)一個(gè)項目的整體流程:

  • 1、tomcat啟動(dòng)一個(gè)WEB項目的時(shí)候,WEB容器會(huì )去讀取它的配置文件web.xml,讀取<listener>和<context-param>兩個(gè)結點(diǎn)。

  • 2、緊接著(zhù),容器創(chuàng )建一個(gè)ServletContext(servlet上下文,全局的),這個(gè)web項目的所有部分都將共享這個(gè)上下文??梢园裇ervletContext看成是一個(gè)Web應用的端組件的共享內存,在ServletContext中可以存放共享數據。ServletContext對象是真正的一個(gè)全局對象,凡是web容器中的Servlet都可以訪(fǎng)問(wèn)

  • 3、容器將<context-param>轉換為鍵值對,并交給servletContext。

  • 4、容器創(chuàng )建<listener>中的類(lèi)實(shí)例,創(chuàng )建監聽(tīng)器。 listener中ContextLoaderListener監聽(tīng)器的作用就是啟動(dòng)Web容器時(shí),監聽(tīng)servletContext對象的變化,獲取servletContext對象的<context-param>,來(lái)自動(dòng)裝配ApplicationContext的配置信息。(即加載applicationContext.xml文件)

2、現在開(kāi)始正式講解applicationContext.xml中的配置內容

1、掃描service層和dao層注解(spring中掃描service,然后再在SpringMVC中掃描controller中掃描controller。 因為如果Controller在主容器中進(jìn)行掃描的話(huà)會(huì )掃描到原樣的service,那時(shí)service還沒(méi)有進(jìn)行事務(wù)處理可能會(huì )引起事務(wù)失效)

如圖所示:首先是開(kāi)啟注解掃描,其次是設置注解掃描的包:com.dao和com.service

A、 <context:annotation-config/> : 自動(dòng)簡(jiǎn)化的完成相應bean的聲明。

啟動(dòng)spring的一些注解,主要包括:向 Spring 容器注冊如下4 個(gè)BeanPostProcessor。

  • 1、AutowiredAnnotationBeanPostProcessor @Autowired注解

  • 2、CommonAnnotationBeanPostProcessor @ Resource 、@ PostConstruct、@ PreDestroy

  • 3、PersistenceAnnotationBeanPostProcessor @PersistenceContext注解

  • 4、RequiredAnnotationBeanPostProcessor 這 @Required的注解

注冊這4個(gè) BeanPostProcessor的作用,就是為了你的系統能夠識別相應的注解。

<context:annotation-config/>的方式等價(jià)于以下的傳統方式:

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

但是配置更加簡(jiǎn)單,方便,不需要按照傳統的方式一條一條配置顯得有些繁瑣和沒(méi)有必要,于是spring給我們提供<context:annotation-config/>的簡(jiǎn)化配置方式,自動(dòng)幫你完成聲明。

B、 設置使用注解的類(lèi)所在的包 主要是dao層和service層,剔除controller層注解掃描

注意,這部分主要是掃描項目中除了controller以外的其他層的注解。配置這部分的目的是在于掃描service包和dao包里面的類(lèi),只要有@Service或者@Repository就注冊成spring容器中的Bean,下次可以通過(guò)@Autowired直接注入。

如果有B的配置,可以不需要A的配置,<context:component-scan base-package=”XX.XX”/> , 該配置項其實(shí)也包含了自動(dòng)注入上述processor的功能,因此當使用 <context:component-scan/> 后,就可以將 <context:annotation-config/> 移除了。

2、配置數據庫相關(guān)內容(這部分內容可以單獨用一個(gè)spring-mybatis.xml進(jìn)行配置,本項目沒(méi)有單獨進(jìn)行配置,而是和applicaitonContext.xml文件一起配置的)

配置db.properties文件-----》配置數據源(dataSource(可以采用數據庫連接池),可以配置多個(gè)數據源(如果有多個(gè)數據庫的話(huà)))---》配置spring+mybatis(Spring和Mybatis整合有兩種方式)----》配置事務(wù)(事務(wù)管理器、配置事務(wù)傳播特性、事務(wù)aop配置)

首先準備db.properties 配置文件

1、所在項目文件夾的位置:

2、applicationContext.xml文件定位到dbconfig.properties文件

3、dbconfig.properties文件內容

4、在applicationContext.xml中配置數據源,后期需要可以在其中添加多個(gè)屬性配置。

5、配置spring+mybatis(主要是獲取sqlSession對象,通過(guò)MapperScannerConfigurer 自動(dòng)裝配SqlSessionFactory 或 SqlSessionTemplate,MapperFactoryBean 創(chuàng )建的代理類(lèi)實(shí)現了 UserMapper 接口,并且注入到應用程序

創(chuàng )建SqlSessionFactory的過(guò)程:

①定義Configuration對象(包括數據源,事務(wù),mapper文件資源以及影響數據庫行為屬性設置的settings)  
--> ②由Configuration對象創(chuàng  )建一個(gè)SqlSessionFactoryBuilder對象
--> ③由SessionFactoryBuilder獲得SqlSessionFactory實(shí)例
--> ④由SqlSessionFactory實(shí)例獲得SqlSession實(shí)例,操作數據庫

在 MyBatis 中,使用 SqlSessionFactoryBuilder創(chuàng )建SqlSessionFactory ,進(jìn)而來(lái)創(chuàng )建 SqlSession。一旦你獲得一個(gè) session 之后,你可以使用它來(lái)執行映射語(yǔ)句,提交或回滾連接,最后,當不再需要它的時(shí)候, 你可以關(guān)閉 session。

Mybatis社區自己開(kāi)發(fā)了一個(gè)Mybatis-Spring用來(lái)滿(mǎn)足Mybatis用戶(hù)整合Spring的需求。使用 MyBatis-Spring 之后, 會(huì )使用SqlSessionFactoryBean來(lái)代替SqlSessionFactoryBuilder創(chuàng )建SqlSessionFactory,然后可以使用下面兩種方式使用sqlSession。

1、SqlSessionTemplate;

2、SqlSessionDaoSupport;上面做法沒(méi)問(wèn)題,但就是在spring.xml中需要配置所有的dao層實(shí)現,把sqlSession或者sqlSessionFactory注入進(jìn)去,可以使用MapperScannerConfigurer來(lái)解決這個(gè)問(wèn)題,MapperScannerConfigurer幫我們自動(dòng)裝配SqlSessionFactory 或 SqlSessionTemplate,因此不需要我們在applicationContext.xml文件中注入sqlSession或者sqlSessionFactory。

SqlSessionFactoryBean、SqlSessionFactory、SqlSession、SqlSessionTemplate之間的關(guān)系。

SqlSessionFactoryBean是生產(chǎn)SqlSessionFactory的一種工廠(chǎng)Bean;SqlSessionFactory是一種生產(chǎn)SqlSession的工廠(chǎng);SqlSession是代表數據庫連接客戶(hù)端和數據庫Server之間的會(huì )話(huà)信息;SqlSessionTemplate是SqlSession的一個(gè)具體實(shí)現。

SqlSessionTemplate介紹:

Mybatis-Spring提供了一種直接使用SqlSession的方式(一個(gè)實(shí)現了SqlSession接口的SqlSessionTemplate實(shí)現類(lèi))

  • 1、它是線(xiàn)程安全的,可以被多個(gè)Dao同時(shí)使用;

  • 2、 它跟Spring的事務(wù)進(jìn)行了關(guān)聯(lián),確保當前被使用的SqlSession是一個(gè)已經(jīng)和Spring的事務(wù)進(jìn)行綁定了的,而且它還可以自己管理Session的提交和關(guān)閉。

applicationContext.xml配置:Spring和Mybatis整合有兩種方式

方式一:需要mapper.xml文件,mapper文件里面寫(xiě)sql語(yǔ)句,UserMapper接口類(lèi)里面不寫(xiě)sql語(yǔ)句

方式二:不需要mapper.xml文件,但是需要在UserMapper里面寫(xiě)sql語(yǔ)句

5.1、需要配置MapperScannerConfigurer 自動(dòng)掃描 將Mapper接口生成代理注入到Spring,這部分實(shí)現mapper.xml文件映射成mapper接口類(lèi)的實(shí)現類(lèi),自動(dòng)注入到spring中,這樣我們就不用寫(xiě)mapper接口的實(shí)現類(lèi)了。

原理:Mybatis在與Spring集成的時(shí)候可以配置MapperFactoryBean來(lái)生成Mapper接口的代理,MapperFactoryBean 創(chuàng )建的代理類(lèi)實(shí)現了 UserMapper 接口,并且注入到應用程序中。 因為代理創(chuàng )建在運行時(shí)環(huán)境中(Runtime,譯者注) ,那么指定的映射器必須是一個(gè)接口,而 不是一個(gè)具體的實(shí)現類(lèi)。MapperScannerConfigurer , 它 將 會(huì ) 查 找 類(lèi) 路 徑 下 的 映 射 器 并 自 動(dòng) 將 它 們 創(chuàng ) 建 成 MapperFactoryBean。(需要增加對MapperFactoryBean源碼的理解

注 意 , 沒(méi) 有 必 要 去 指 定 SqlSessionFactory 或 SqlSessionTemplate , 因 為 MapperScannerConfigurer 將會(huì )創(chuàng )建 MapperFactoryBean,之后自動(dòng)裝配。但是,如果你使 用了一個(gè) 以上的 DataSource ,那 么自動(dòng) 裝配可 能會(huì )失效 。這種 情況下 ,你可 以使用 sqlSessionFactoryBeanName 或 sqlSessionTemplateBeanName 屬性來(lái)設置正確的 bean 名 稱(chēng)來(lái)使用。這就是它如何來(lái)配置的,注意 bean 的名稱(chēng)是必須的,而不是 bean 的引用,因 此,value 屬性在這里替代通常的 ref。

6、配置事務(wù)管理器(聲明式事務(wù):用面向切片編程AOP的思想,來(lái)管理事務(wù);編程式:TransactionTemplate)

<!-- 對dataSource 數據源進(jìn)行事務(wù)管理 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"></property>
</bean>
 
<!-- 事務(wù)管理 通知,對不同的方法進(jìn)行不同的事務(wù)管理 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <!-- 對insert,create,update,modify,delete,remove 開(kāi)頭的方法進(jìn)行事務(wù)管理,只要有異常就回滾 -->
        <tx:method name="insert*" propagation="REQUIRED" rollback-for="java.lang.Throwable"  read-only="false"/>
        <tx:method name="add*" propagation="REQUIRED" rollback-for="java.lang.Throwable"  read-only="false"/>
        <tx:method name="create*" propagation="REQUIRED" rollback-for="java.lang.Throwable"  read-only="false"/>
        <tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Throwable"  read-only="false"/>
        <tx:method name="modify*" propagation="REQUIRED" rollback-for="java.lang.Throwable"  read-only="false"/>
        <tx:method name="delete*" propagation="REQUIRED" rollback-for="java.lang.Throwable"  read-only="false"/>
        <tx:method name="remove*" propagation="REQUIRED" rollback-for="java.lang.Throwable" read-only="false"/>
        <!-- find,get,select,count開(kāi)頭的方法,開(kāi)啟只讀,提高數據庫訪(fǎng)問(wèn)性能 -->
        <tx:method name="find*" read-only="true" />
        <tx:method name="get*" read-only="true" />
        <tx:method name="select*" read-only="true" />
        <tx:method name="count*" read-only="true" />
        <!-- 對其他方法 使用默認的事務(wù)管理 -->
        <tx:method name="*" />
    </tx:attributes>
</tx:advice>
 
<!-- 事務(wù) aop 配置     
<aop:pointcut>切入點(diǎn)    <aop:advice>需要注入的方法   <aop:advisor> 適配器,把注入的方法注入切入點(diǎn)的位置,是連接pointcut跟advice的工具-->
 
<aop:config>
    <aop:pointcut id="serviceMethods" expression="execution(public * com.service..*(..))" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods" />
</aop:config>
 
<!-- 配置使Spring采用CGLIB代理 --><!-- 開(kāi)啟基于@AspectJ切面的注解處理器 -->
<aop:aspectj-autoproxy proxy-target-class="true" />
 
<!-- 配置 Annotation 驅動(dòng),掃描@Transactional注解的類(lèi)定義事務(wù)  -->
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
事務(wù)管理的兩種方式:

事務(wù)管理對于企業(yè)應用而言,是至關(guān)重要的,即使出現異常情況,他也可以保證數據的一致性。

事務(wù)的管理方式有兩種:

  • 1、支持編程式事務(wù)管理、

  • 2、支持聲明式事務(wù)管理方式。編程式事務(wù)管理是使用:TransactionTemplate,聲明式事務(wù)管理建立在A(yíng)OP之上,其本質(zhì)是對方法前后進(jìn)行攔截,然后在目標方法開(kāi)始之前創(chuàng )建或者加入一個(gè)事務(wù),在執行完目標方法之后,根據執行情況提交或者回滾事務(wù)。聲明式事務(wù)的優(yōu)點(diǎn)是可以基于注解@Transactional來(lái)管理,很方便,但是不足之處在于粒度較大,只能作用到方法級別,不能像編程式事務(wù)那樣,做到代碼塊級別。

(2)sping-mvc.xml的配置

web項目啟動(dòng)時(shí),讀取web.xml配置文件,首先解析的是applicationContext.xml文件,其次才是sping-mvc.xml文件,sping-mvc.xml文件中主要的工作是:?jiǎn)?dòng)注解、掃描controller包注解;靜態(tài)資源映射;視圖解析(defaultViewResolver);文件上傳(multipartResolver);返回消息json配置。

1.自動(dòng)掃描

<!-- 自動(dòng)掃描該包,使SpringMVC認為包下用了@controller注解的類(lèi)是控制器 -->
<context:component-scan base-package="com.javen.controller" />

2.注解驅動(dòng)

<!-- 擴充了注解驅動(dòng),可以將請求參數綁定到控制參數-->
<mvc:annotation-driven />

3.靜態(tài)資源處理

<!-- 靜態(tài)資源處理 css js images -->
<mvc:resources location="/resources/**" mapping="/resource/"/>

4.避免IE執行AJAX時(shí),返回JSON出現下載文件

<!-- 避免IE執行AJAX時(shí),返回JSON出現下載文件 -->
<bean id="mappingJacksonHttpMessageConverter" 
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>

5.啟動(dòng)SpringMVC的注解功能,完成請求和注解POJO的映射

<!-- 啟動(dòng)SpringMVC的注解功能,完成請求和注解POJO的映射 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="mappingJacksonHttpMessageConverter"/><!-- JSON轉換器 -->
</list>
</property>
</bean>

6.配置文件上傳

<!-- 配置文件上傳,如果沒(méi)有使用文件上傳可以不用配置,當然如果不配,那么配置文件中也不必引入上傳組件包 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 默認編碼 -->
<property name="defaultEncoding" value="utf-8" />
<!-- 上傳文件最大值 -->
<property name="maxUploadSize" value="10485760000"/>
<!-- 內存中的最大值 -->
<property name="maxInMemorySize" value="40960"/>
<!-- 啟用是為了推遲文件解析,以便捕獲文件大小異常 -->
<property name="resolveLazily" value="true"/>
</bean>

7.配置viewResolver視圖解析

<!-- 配置viewResolver??梢杂枚鄠€(gè)viewResolver。使用order屬性排序。InternalResourceViewResolver 放在最后 -->
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="1"></property>
<property name="mediaTypes">
<map>
<!-- 告訴視圖解析器,返回的類(lèi)型為json格式 -->
<entry key="json" value="application/json" />
<entry key="xml" value="application/xml" />
<entry key="htm" value="text/htm" />
</map>
</property>
<property name="defaultViews">
<list>
<!-- ModelAndView里的數據變成JSON -->
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
</list>
</property>
<property name="ignoreAcceptHeader" value="true"></property>
</bean>

8.定義跳轉的文件的前后綴 ,視圖模式配置

<!-- 定義跳轉的文件的前后綴 ,視圖模式配置--> 
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
<!-- 這里的配置我的理解是自動(dòng)給后面action的方法return的字符串加上前綴和后綴,變成一個(gè) 可用的url地址 --> 
<property name="prefix" value="/WEB-INF/jsp/" /> 
<property name="suffix" value=".jsp" /> 
</bean>

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

精品综合久久久久久888蜜芽| 伊人久久精品无码AV一区| 国产人成精品香港三级在线| 国产精品综合一区二区三区| 5566亚洲精华国产精华精华液| 色在线 | 国产|