面试常问Spring AOP和事务注解@Transactional原理

内容大纲

  • 动态代理技术
  • ProxyFactory
  • Advice分类
  • Advisor
  • Spring创建代理对象的方式
  • Spring AOP概念
  • ProxyFactory对Cglib或JDK Proxy的选择
  • 代理对象创建过程
  • @EnableTransactionManagement原理
  • Spring事务基本执行原理
  • Spring事务的传播机制
  • TransactionSynchronization工具类

1.动态代理技术

1.1.JDK动态代理

基于Proxy类的#newInstance( )方法来获取目标对象的代理对象,JDK的动态代理必须基于接口实现,因为Java语言不支持多继承,但是支持多实现。 实现机制:

     1. 编写生成类实现`InvocationHandler接口`,覆盖invoke方法,实现切面逻辑。
     1. 通过Proxy的#newInstance( )静态方法来获取代理对象。
复制代码

1.2.Cglib动态代理

Cglib是一个第三方代码生成库,是对ASM字节码技术的二次封装,在运行时动态生成代理对象,它的特点是基于子类继承的关系来实现。 特点:基于子类的继承、无法对final修饰的类和方法进行代理、效率高、额外引入Jar包。 实现机制:

     1. 编写生成类实现`MethodInterceptor接口`,覆盖intercept方法,实现切面逻辑。
     1. new一个Enhancer类来实现父子类的委托。
     1. 将实现了MethodInterceptor的类作为入参放入Enhancer的callbacks属性里。
     1. 通过enhancer对象的#create( )方法得到代理对象。
复制代码

1.3.ASM字节码技术

ASM是一个操纵字节码的工具框架,ASM可以直接生成二进制的class文件,可以对class文件做修改。 实现机理:ASM通过访问者模式,将文件的内容从头到尾扫描,每当扫描到特定的内容标识就会回调对应的逻辑处理方法,基于此可以实现对源文件的增强,来实现代理技术。 由于是直接操纵字节码,效率十分高。常见的Groovy、Cglib都运用了ASM技术。

1.4.AspectJ

AspectJ全称Eclipse AspectJ,是一个简单易用高效的AOP框架,也是一种基于Java平台的语言。Java语言的编译器是javac,AspectJ语言的编译器是ajc。 AspectJ属于是静态织入,也就是说在编译期就织入完成,但是他的效率比Spring的AOP更高。

2.ProxyFactory 代理工厂

Spring不可能直接写Cglib或者JDK的动态代理,而是基于这俩做了封装,封装出来的类叫做ProxyFactory代表是一个代理工厂,专门负责创建代理对象。

UserService target = new UserService(); 
ProxyFactory proxyFactory = new ProxyFactory(); 
proxyFactory.setTarget(target); 
proxyFactory.addAdvice(new MethodInterceptor() { 
    @Override 
    public Object invoke(MethodInvocation invocation) throws Throwable {
        System.out.println("before...");                                                                                                                   
        Object result = invo
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值