• 方式一:bean
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
• 方式二: 命名空间<context:annotation-config />
<context:annotationconfig />将隐式地向Spring 容器注册AutowiredAnnotationBeanPostProcessor 、CommonAnnotationBeanPostProcessor 、 PersistenceAnnotationBeanPostProcessor 以及RequiredAnnotationBeanPostProcessor 这4 个BeanPostProcessor 。
• 方式三: 命名空间<context:component-scan/>
如果要使注解工作,则必须配置component-scan ,实际上不需要再配置annotation-config。
base-package 属性指定了需要扫描的类包,类包及其递归子包中所有的类都会被处理。还允许定义过滤器将基包下的某些类纳入或排除。
启用SpringMVC注解
启动SpringMVC 的注解功能,完成请求和注解POJO的映射
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
视图解析器
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
配置静态资源,直接映射到对应的文件夹,不被DispatcherServlet处理,3.04新增功能,需要重新设置spring-mvc-3.0.xsd
<mvc:resources mapping="/js/**" location="/js/"/>
拦截器
<mvc:interceptors>
<!-- 多个拦截器,顺序执行 -->
<mvc:interceptor>
<mvc:mapping path="/*" /><!-- 如果不配置或/*,将拦截所有的Controller -->
<bean class="com.interceptor.CommonInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
数据源定义,使用dbcp连接池
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
<property name="username" value="mytest"/>
<property name="password" value="1" />
<!--最大连接数据库连接数,设置为0时,表示没有限制;-->
<property name="maxActive" value="10" />
<!--maxIdle:最大等待连接中的数量,设置为0时,表示没有限制;-->
<!--<property name="maxIdle" value="${jdbc.maxIdle}" />-->
<!--<!–maxWait:最大等待秒数,单位为毫秒, 超过时间会报出错误信息;–>-->
<!--<property name="maxWait" value="${jdbc.maxWait}" />-->
<!--<property name="timeBetweenEvictionRunsMillis" value="1800000" />-->
<!--<property name="numTestsPerEvictionRun" value="3" />-->
<!--<property name="minEvictableIdleTimeMillis" value="1800000" />-->
<!--<property name="validationQuery" value="SELECT 1" />-->
</bean>
JNDI 数据源配置
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName"
value="java:comp/env/jdbc/***_jndi" />
<property name="lookupOnStartup" value="false" />
<property name="cache" value="true" />
<property name="proxyInterface" value="javax.sql.DataSource" />
</bean>
web.xml中的配置
<resource-ref id="ResourceRef_1200938765687">
<description></description>
<res-ref-name>jdbc/***_jndi</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
tomcat中的server.xml配置
<Context path="/" reloadable="true" docBase="F:\workspace\***\WebRoot" workDir="F:\workspace\***\work" >
<Resource name="jdbc/***_jndi" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="***" password="1"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@***:1521:***"/>
</Context>
配置数据源的另一种方式
<!-- 读取资源文件 -->
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties" />
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>${driverClassName}</value>
</property>
<property name="password">
<value>${password}</value>
</property>
<property name="username">
<value>${username}</value>
</property>
<property name="url">
<value>${url}</value>
</property>
</bean>
配置事务管理器
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
拦截器方式配置事物
<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="modify*" propagation="REQUIRED" />
<tx:method name="edit*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="remove*" propagation="REQUIRED" />
<tx:method name="get*" propagation="SUPPORTS" />
<tx:method name="find*" propagation="SUPPORTS" />
<tx:method name="load*" propagation="SUPPORTS" />
<tx:method name="search*" propagation="SUPPORTS" />
<tx:method name="*" propagation="SUPPORTS" />
</tx:attributes>
</tx:advice>
自动代理配置
<aop:config>
<aop:pointcut id="transactionPointcut" expression="execution(* com.dengyang.service..*Impl.*(..))" />
<aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice" />
</aop:config>
标注类型 的事务配置
<tx:annotation-driven transaction-manager="transactionManager"/>
===================与mybatis集成=======================
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis.xml" />
<property name="mapperLocations">
<list>
<value>classpath:cn/info/platform/mapper/*-mapper.xml</value>
<value>classpath:cn/info/platform/entity/*-resultmap.xml</value>
</list>
</property>
</bean>
自动扫描cn.info.platform.mapper包下的Mapper接口,并实现其功能 , mybatis配置文件中namespace名字必须与Mapper接口名一致 ,接口中的方法名与mybatis中的sql的id一致。这样,在调用接口中的方法时,自动会去执行方法对应的sql语句
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.info.platform.mapper" />
<property name="markerInterface" value="cn.info.platform.mapper.BaseMapper" />
</bean>
如不配置以上这段代码,则实现Mapper接口,仍能达到一样的效果