ssm-说一下SpringAOP?

1.AOP,也就是面向切面编程,其次还有面向过程和面向对象编程.

2.SpringAOP实现主要是通过代理类的方式来实现的,有jdk动态代理CGLIB代理两种方式.

3.Java动态代理只能对接口进行代理,不能对普通的类进行代理(因为所有生成的代理类的父类都是Proxy,Java类继承机制不允许多重继承);CGLIB能够代理普通类

4.Spring内部,发现如果目标对象没有实现接口,默认会采用CGLIB代理,如果目标对象实现了接口,默认会采用Java动态代理.

5.AOP用到的动态代理是对方法增强的方式之一

6.AOP的典型应用就是事务管理.

简要回答

1.SpringAOP有jdk动态代理和CGLIB方式

2.Spring内部,发现目标对象有接口就使用Java动态代理,没有就用CGLIB

3.AOP的典型应用就是事务管理

辅助理解

1、验证Java动态代理只能够对接口进行代理,不能对普通的类进行代理

import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 
 public class DynamicProxy {
     interface IHello {
         void sayHello();
    }
 
     static class Hello implements IHello {
         public void sayHello() {
             //before
             System.out.println("hello world");
             //add
        }
    }
 
     static class DynamicProxyTest implements InvocationHandler {
         Object originalObj;
 
         Object bind(Object originalObj) {
             this.originalObj = originalObj;
             return Proxy.newProxyInstance(originalObj.getClass().getClassLoader(),
                     originalObj.getClass().getInterfaces(), this);
        }
 
         public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
             System.out.println("before");//之前
             Object invoke = method.invoke(originalObj, args);
             System.out.println("after");//之后
             return invoke;
        }
    }
 
     public static void main(String[] args) {
         //设置这个值,在程序运行完成后,可以生成代理类 jdk1.8测试
         System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");
         IHello hello = (IHello) new DynamicProxyTest().bind(new Hello());
         hello.sayHello();
    }
 }

运行结果
在这里插入图片描述
用everyThing找到$Proxy0.class
在这里插入图片描述
使用idea打开,查看结果,继承了Proxy,java单继承,所以验证了我们的结论。
在这里插入图片描述

2、对java方法进行功能增强的三种方法 1.通过继承的方式

a.对哪个类的方法进行增强,可以采用继承那个类的方式,通过继承该类,可以重写方法,如果还需要老方法的一些功能,使用super调用

2.通过装饰者模式

a.需要对某个接口或抽象类的实现类的重写的方法进行功能增强可以使用装饰者模式

3.动态代理
参考对java方法进行功能增强的三种方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值