在將spring與springMVC結合使用時,當咱們使用註解的時候,通常都是在spring配置文件中配置註解掃描dao層、service層的包,在springMVC配置文件中配置註解掃描controller,本身在練習spring+SpringMVC+mybatis的項目時對這種作法只知其一;不知其二,因此在練習項目的時候在實踐中對本身的一些想法進行了驗證。web
<?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-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!-- 啓用註解 --> <context:annotation-config /> <!-- 設置使用註解的類所在的包 --> <context:component-scan base-package="dao,service.*"></context:component-scan> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:config/jdbc.properties</value> </list> </property> </bean> <!-- c3p0鏈接池配置 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 四大參數的name不能換,和鏈接池的構造函數有關--> <property name="driverClass" value="${jdbc.driverClassName}"/> <property name="jdbcUrl" value="${jdbc.url}" /> <property name="user" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!--鏈接池中保留的最大鏈接數。默認值: 15 --> <property name="maxPoolSize" value="20"/> <!-- 鏈接池中保留的最小鏈接數,默認爲:3--> <property name="minPoolSize" value="2"/> <!-- 初始化鏈接池中的鏈接數,取值應在minPoolSize與maxPoolSize之間,默認爲3--> <property name="initialPoolSize" value="2"/> <!--最大空閒時間,60秒內未使用則鏈接被丟棄。若爲0則永不丟棄。默認值: 0 --> <property name="maxIdleTime" value="60"/> <!-- 當鏈接池鏈接耗盡時,客戶端調用getConnection()後等待獲取新鏈接的時間,超時後將拋出SQLException,如設爲0則無限期等待。單位毫秒。默認: 0 --> <property name="checkoutTimeout" value="3000"/> <!--當鏈接池中的鏈接耗盡的時候c3p0一次同時獲取的鏈接數。默認值: 3 --> <property name="acquireIncrement" value="2"/> <!--定義在從數據庫獲取新鏈接失敗後重復嘗試的次數。默認值: 30 ;小於等於0表示無限次--> <property name="acquireRetryAttempts" value="0"/> <!--從新嘗試的時間間隔,默認爲:1000毫秒--> <property name="acquireRetryDelay" value="1000" /> <!--關閉鏈接時,是否提交未提交的事務,默認爲false,即關閉鏈接,回滾未提交的事務 --> <property name="autoCommitOnClose" value="false"/> <!--c3p0全局的PreparedStatements緩存的大小。若是maxStatements與maxStatementsPerConnection均爲0,則緩存不生效,只要有一個不爲0,則語句的緩存就能生效。若是默認值: 0--> <property name="maxStatements" value="100"/> <!--maxStatementsPerConnection定義了鏈接池內單個鏈接所擁有的最大緩存statements數。默認值: 0 --> <property name="maxStatementsPerConnection" value="0"/> </bean> <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <!-- 配置mybatis配置文件 --> <property name="configLocation"> <value>classpath:config/sqlMapConfig.xml</value> </property> <!-- 實體類映射文件路徑,能夠在這裏直接配置,也能夠在configLocation配置的文件中配置 ibatis2不支持 --> <!-- <property name="mapperLocations" value="classpath:config/sqlmap/*.xml" /> --> </bean> <!-- Dao --> <bean id="ibatisDao" class="dao.IbatisDao"> <property name="dataSource" ref="dataSource"></property> <!-- 這裏的dao繼承SqlMapClientDaoSupport,因此要顯示的配置注入 sqlMapClient--> <property name="sqlMapClient"> <ref bean="sqlMapClient"/> </property> </bean> <!-- 開啓事務註解 --> <tx:annotation-driven transaction-manager="transactionManager"/> <!-- 定義事務管理器(聲明式的事務) --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> </beans>
這裏咱們配置了事務管理器和基本的dao。service層採用的是註解注入ajax
<?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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!-- 啓用spring mvc 註解 --> <context:annotation-config /> <!-- 設置使用註解的類所在的包 --> <context:component-scan base-package="controller"></context:component-scan> <!-- 完成請求和註解POJO的映射 3.1後已通過時 與DefaultAnnotationHandlerMapping配套使用 <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />--> <!-- 新的註解映射--> <!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> --> <!-- 使用新的註解映射必須指定 RequestMappingHandlerMapping去替代過期的DefaultAnnotationHandlerMapping--> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <!-- 使用ajax向前臺返回json須要在註解映射中添加轉換器 --> <!-- 依賴包爲jackson-core 、 jackson-annotation、 jackson-databind --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="jsonHttpMessageConverter"/> </list> </property> </bean> <bean id="jsonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" /><!-- 用於jackson2 --> <!-- class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/> --> <!-- 對轉向頁面的路徑解析。prefix:前綴, suffix:後綴 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/page/" p:suffix=".jsp" /> </beans>
springMVC配置文件中配置了指定的HandlerAdapter和HandlerMapping以及Resolver。
在這種配置下,項目能正常運行,配置了@Transactional的service中的事務也能被咱們的事務管理器管理。spring