spring配置
从毕业到现在已经四年多了,接触spring也四年多了,看了一些有关spring的书,但一直都是看过就忘,很少做笔记记录,很多时候都是从以往的项目中copy配置文件改改就使用了,现将常用的配置整理一下,如有不对的地方望大家批评指正。
自动扫描
在使用spring的注解时,需要开启包扫描,否则无法将类加载到spring容器中。
<!--自动扫描-->
<context:annotation-config/>
<!--指定扫描的包名-->
<context:component-scan base-package="com.jihb.tally.sdk.service,com.jihb.tally.sdk.dao,com.jihb.tally.sdk.impl"/>
properties文件的配置使用
properties文件的两种配置方式
1、使用org.springframework.beans.factory.config.PropertyPlaceholderConfigurer
<context:property-placeholder location="classpath:config.properties"/>
或
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:config.properties</value>
</list>
</property>
<property name="fileEncoding" value="utf-8"/>
</bean>
2、使用org.springframework.beans.factory.config.PropertiesFactoryBean
<bean id="config" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath:config.properties</value>
</list>
</property>
<property name="fileEncoding" value="utf-8"/>
</bean>
这两种方式都是可以指定多个properties文件的,第一种方式的第一种写法是一种简化写法,有多个文件时,只需要在多个文件之间以逗号分隔即可,第一种方式的第二种写法和第二种配置方式则在list配置下添加即可。当然,PropertyPlaceholderConfigurer和PropertiesFactoryBean在使用的时候也是有所区别的。如在通过spring的注解来自动注入值时的写法就有所不同了。
第一种方式的写法如下:
@Value("${sys.sysName}")
private String sysName;
第二种方式的写法如下:
@Value("#{config['sys.sysName']")
private String sysName;
使用jdbc配置
spring中对jdbc和其他orm框架都进行了一定的封装,已使用户更方便的使用它们,在这里只说说spring-jdb的配置。
在配置使用jdbc时,一般需要配置数据源和事物管理,如果事物是要通过aop来限制的话,还需要配置aop切面和advice增强。
配置数据源
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driverClassName}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="maxPoolSize" value="${jdbc.maxPoolSize}"/>
<property name="minPoolSize" value="${jdbc.minPoolSize}"/>
<property name="initialPoolSize" value="${jdbc.initialPoolSize}"/>
<property name="maxIdleTime" value="${jdbc.maxIdleTime}"/>
<property name="preferredTestQuery" value="select 1"/>
</bean>
配置事物
<!--事物控制-->
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
transaction-manager=”transactionManager”这个其实是可以不用配的,因为默认就会引用名为transactionManager的事物管理。可以简写为:
<tx:annotation-driven/>
配置aop
<aop:config>
<!--切面-->
<aop:pointcut id="serviceMethod" expression="execution(* *.*.*Impl.*(..))"/>
<!--引用事物增强-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod"/>
</aop:config>
<!--事物增强-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="find*" read-only="true"/>
<tx:method name="query*" read-only="true"/>
<tx:method name="add*"/>
<tx:method name="update*"/>
</tx:attributes>
</tx:advice>
配置jdbc工具类
<bean id="jdbcHelper" class="com.jihb.tally.sdk.spjdbc.impl.MySqlJdbcHelper">
<property name="dataSource" ref="dataSource"></property>
</bean>
这样在spring中就可以使用jdbc进行数据访问了,MySqlJdbcHelper是我自己封装的数据访问类,最终都是使用spring封装的JdbcTemplate来进行数据访问。MySqlJdbcHelper中定义两个变量JdbcTemplate jdbcTemplate和DataSource dataSource,代码如下:
JdbcTemplate jdbcTemplate;
DataSource dataSource;
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
this.dataSource = dataSource;
}
时间有限,暂且写到这里,语言能力比较差,望读者大大门见谅!!