Spring AOP

动态代理

jdk动态代理(必须有接口)
public Object getProxy() {
        //获取当前类的类加载器,用来加载代理对象所属类
        ClassLoader classLoader = this.getClass().getClassLoader();
        //获取目标对象实现的所有接口的Class,代理类会和目标类实现相同的接口,最后通过代理对象实现功能
        Class[] interfaces = mathImpl.getClass().getInterfaces();
        return Proxy.newProxyInstance(classLoader, interfaces, new InvocationHandler() {
            //代理对象实现功能的方式
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                System.out.println("前");
                Object result = method.invoke(mathImpl, args);//动态代理对象实现功能
                System.out.println("后");
                return result;
            }
        });
    }


    public static void main(String[] args) {
        ProxyUtil proxyUtil = new ProxyUtil(new MathImpl);
        //Object proxy2 = proxyUtil.getProxy();
        MathI math = (MathI)proxyUtil.getProxy();
        int i = math.add(1,1);
        System.out.println(i);
    }

AOP概述

AOP(Aspect-Oriented Programming,面向切面编程):是一种新的方法论,是对传统OOP(object-Oriented Programming,面向对象编程)的补充。
面向对象:纵向继承机制
面向切面:横向抽取机制

@Transactional中可以设置的属性

propagation(事务的传播级别):A方法和B方法都有事务,当A在调用B时,会将A中的事务传播给B方法,B方法对于事务的处理方式就是事务的传播行为
	Propagation.REQUIRED:必须使用调用这的事务
	Propagation.REQUIRES_NEW:不使用调用者的事务,使用新的事务进行处理


isolation(事务的隔离级别):在并发的情况下,操作数据的一种规定
	读未提交:脏读  1(2的0次方)
	读已提交:不可重复读  2 (2的1次方)
	可重复读:幻读  4 (2的2次方)
	可串行化:性能低、消耗大  8(2的3次方)


timeout:在事务强制回滚前最多可以执行(等待)的时间

readOnly:指定当前事务中的一系列的操作是否为只读,默认为false
	若设置为只读,不管事务中有没有写的操作,mysql就会在请求方位数据的时候,不加锁,提高性能
	但是如果有些操作的情况,建议一定不能设置只读

rollbackFor|rollbackForClassName|noRollbackFor|noRollbackForClassName:设置事务的回滚条件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值