1. Annotation自动扫描
<!-- Spring annotation扫描 --> <!--<context:component-scan base-package="com.baidu.fbu.fcore.acc" />--> <context:component-scan base-package="com.baidu.fbu.fcore.accounting.loan" /> <context:component-scan base-package="com.baidu.fbu.fcore.accounting" /> <context:component-scan base-package="com.baidu.fbu.fcore.common" /> <context:component-scan base-package="com.baidu.fbu.fcore.common.daycut" />
使用context:component-scan,则自动包含了对@Autowired等的支持。
2. 包含其他模块的bean
<!-- 账务规则引擎 --> <bean id="accountingService" class="com.baidu.fbu.fcore.accounting.common.service.AccountingService" /> <bean id="accountingReqHandler" class="com.baidu.fbu.fcore.accounting.common.service.AccountingReqHandler" /> <bean id="accountingEntryGenerator" class="com.baidu.fbu.fcore.accounting.common.service.AccountingEntryGenerator" /> <bean id="accountingRuleEngine" class="com.baidu.fbu.fcore.accounting.common.service.AccountingRuleEngine" init-method="init" />
<!-- UID generator --> <bean id="disposableWorkerIdAssigner" class="com.baidu.fbu.fcore.common.uid.worker.DisposableWorkerIdAssigner" /> <bean id="cachedUidGenerator" class="com.baidu.fbu.fcore.common.uid.impl.CachedUidGenerator"> <property name="workerIdAssigner" ref="disposableWorkerIdAssigner" /> </bean>
将其他模块的类注入到本模块中。
3. Import
<!-- Imports --> <import resource="classpath:META-INF/spring/accg-spring-mybatis.xml" /> <import resource="classpath:META-INF/spring/accg-spring-cache.xml" /> <import resource="classpath:META-INF/spring/accg-spring-jobs.xml" />
注入其他配置文件。
4. AOP
<aop:aspectj-autoproxy />自动为配置@aspect的bean创建代理。
proxy-target-class属性若此值为true强制使用CGLIB代理。
5. Cache
<!-- Cache manager --> <cache:annotation-driven/> <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager"> <property name="caches"> <set> <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="${accg.cache.name}" p:allowNullValues="false" /> <bean class="com.baidu.fbu.fcore.common.cache.RedisCache"> <property name="name" value="${daycut.cache.name}" /> <property name="ttl" value="${daycut.cache.ttl}"></property> </bean> </set> </property> </bean>
采用的缓存是spring的已实现缓存SImpleCacheManager,定义了两个缓存方案:ConcurrentMapCacheFactoryBean 和 RedisCache。
前者的name为${accg.cache.name},后者的name为${daycut.cache.name}。
<!-- Cache interceptor & Advisor --> <bean id="annotationCacheOperationSource" class="org.springframework.cache.annotation.AnnotationCacheOperationSource" /> <bean id="cacheInterceptor" class="com.baidu.fbu.fcore.common.cache.SignatureCacheInterceptor"> <property name="cacheManager" ref="cacheManager"></property> <property name="keyGenerator" ref="keyGenerator"></property> <property name="cacheOperationSources" ref="annotationCacheOperationSource"></property> </bean> <bean id="beanFactoryCacheOperationSourceAdvisor" class="org.springframewor k.cache.interceptor.BeanFactoryCacheOperationSourceAdvisor"> <property name="order" value="10"></property> <property name="adviceBeanName" value="cacheInterceptor"></property> <property name="cacheOperationSource" ref="annotationCacheOperationSource"></property> </bean>
cacheInterceptor
6. MyBatis
<!-- 创建SqlSessionFactory,同时指定数据源 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="accgDataSource" /> <property name="mapperLocations"> <array> <value>classpath*:META-INF/mybatis/mapper/*.xml</value> <value>classpath*:META-INF/mybatis/mapper/batch/*.xml</value> <value>classpath*:META-INF/mybatis/mapper/accounting/*.xml</value> </array> </property> <property name="typeHandlersPackage" value="com.baidu.fbu.fcore.common.mybatis.type" /> <property name="configurationProperties"> <map> <entry key="__dbPrefix" value="${db.prefix}" /> </map> </property> <!-- 分库分表规则 --> <property name="plugins"> <list> <bean class="com.baidu.dba.jsqllib.plugin.ShardPlugin"> <property name="shardingConfig" value="classpath:shardingConfig.xml" /> </bean> </list> </property> </bean>
<bean id="batchSqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory" /> <constructor-arg index="1" value="BATCH" /> </bean>
7. Properties文件
<!-- 确保可在@Value中, 使用SeEL表达式获取资源属性 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="properties" ref="configProperties" /> </bean> <bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="locations"> <list> <value>classpath*:*.properties</value> </list> </property> </bean>
上述配置将起作用的properties文件包含进来。
classpath*:*.properties,实际的property文件在test目录下。 /test/resource/config/xxx.properties
8. Transaction
<!-- 事务相关配置 --> <tx:annotation-driven transaction-manager="transactionManager" order="1" /> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="accgDataSource" /> </bean>
在配置文件中定义了transaction。
注意,仅当代码中抛出runtime exception才会回滚,其余exception则不会。
版权声明:本文为Lucifer2603原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。