Spring 杂文

1.配置文件转换成对应的注解形式
<bean id="exampleBean" factory-bean="serviceLocator" factory-method="createInstance"/>
在 @Confiuration 的类直接使用 @Bean...
@Confiugration
public class AppConfig{
@Bean
Instance yourInstance(){
return InstanceFactory.createInstance();
}
}
2.[b]Spring的DAO被强制用接口的原因[/b]
Spring IOC本身是不会强制基于接口的,但DAO类一般要使用Spring的声明式事务机制,而声明式的事务机制是使用Spring AOP来实现的。Spring AOP的实现机制包括动态代理和Cgilib2,其中Spring AOP默认使用的Java动态代理是必须基于接口,所以就要求基于接口了。
注意:如果有时需要对多个dao进行事物的一致性处理(有一个dao操作失败时,要进行全部回滚),可能会将事物作用于service方法上,所以这时如果是使用spring AOP的声明式事物处理的话就也会使用java动态代理的方式。即也许要service是基于接口编程的。
解决办法就是:让事物代理使用CGlib的形式。
<bean class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
id="baseService" abstract="true">
<property name="transactionManager" ref="transactionManager"/>
<property name="proxyTargetClass" value="true"/>

</bean>
3.spring本身是个容器,管理着注入容器的组件。但是实例话这些组件并非是通过new关键字的,而是通过反射。Class.forName()
4.spring aop配置实例
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="allManagerMethod"
expression="execution(* byd.service.impl.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod" />
</aop:config>
5.事物的传播性
常见的事物传播规则有如下几种:

1).PROPAGATION_MANDATORY: 要求调用该方法的线程必须处于事务环境中,否则抛出异常;
2).PROPAGATION_NESTED:如果执行该方法的线程已处于事务环境下,依然启动新的事务,方法在嵌套的事务里执行。如果执行该方法的线程并未处于事务中,也启动新的事务,然后执行该方法,此时与 PROPAGATION_REQUIRED相同;
3).PROPAGATION_NEVER:不允许调用该方法的线程处于事务环境下,如果调用该方法的线程处于事务环境下,则抛出异常;
4). PROPAGATION_NOT_SUPPORTED:如果调用该方法的线程处于事务中,则先暂停当前事务,然户执行该方法;
5).PROPAGATION_REQUIRED:要求在事务环境中执行该方法,如果当前线程已处于事务中,则直接调用,然后执行该方法;
6).PROPAGATION_REQUIRES_NEW:该方法要求有一个在新的事务环境中执行,如果当前线程已处于事务中,先暂停当前事务,启动新事务后执行该方法,如果当前调用线程不处在事务中,则启动新的事务方法后执行方法;
7).PROPAGATION_SUPPORTS:如果当前执行线程处于事务中,则执行当前事务,否则不使用事务。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值