springaop

aop面向切面编程

aop术语

1.连接点:程序执行中某一特定位置,如:方法的前后
2.切点:定位到相应的连接点
3.增强或者事务:对连接点进行增强
4.目标对象:target,需要拓展的目标类
5.切面:切点和事务组成切面

spring 实现aop的两种方式

1.jdk动态代理:目标对象有接口时用这种方式
2.CGLIB动态代理:目标对象没有接口

标记为final的方法不能够被通知。spring是为目标类产生子类。任何需要 被通知的方法都被复写,将通知织入。final方法是不允许重写的。

xml版aop

1.添加aop命名空间

xmlns:aop="http://www.springframework.org/schema/aop"
http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop.xsd

2.事务管理者

public class TxManager {
    public void begin(){
        System.out.println("开始");
    }
    public void commit(){
        System.out.println("提交");
    }
    public void close(){
        System.out.println("关闭");
    }
    public Object around(ProceedingJoinPoint joinPoint){
        begin();
        Object proceed =null;
        try {
             object = joinPoint.proceed();//目标对象中需要增强的方法
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        commit();
        close();
    }
    return object;
}

3.注入txmanager

//注入txmanager
<bean class="com.wal.common.TxManager" id="txManager"/>
<aop:config>
	//切点
	<aop:pointcut expression="execution(* com.wal.aop.I*Service.*(..))" id="pointcut" />
	//切面
	<aop:aspect  ref="txManager">
		//设置环绕通知
		<aop:around method="around" pointcut-ref="pointcut" />
	</aop:aspect>
</aop:config>

注解版aop
1.配置xml 扫描包txmanager

<!-- 组件搜索 -->
<context:component-scan base-package="com.wal.aopanno" />
<!-- 支持aop注解 -->
<aop:aspectj-autoproxy />

2.txManager配置

@Component
@Aspect //AOP的类注解
public class TxManager {
	//设置切点
	@Pointcut("execution(* com.wal.aopanno.I*Service.*(..))")
	public void pointcut(){}
	//切点+事务
	@Around("pointcut()")
	public Object around(ProceedingJoinPoint joinPoint){
	Object object = null;
	try {
		begin();
		object = joinPoint.proceed(); //被增强对象中的方法
		commit();
	} catch (Throwable e) {
		rollback(e);
	}finally{
		close();
	}
	return object;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值