@Transactinal是基于AOP实现的,而AOP的实现原理是动态代理,通常动态代理的方式包含两种JDK动态代理和CGLIB,当一个被代理类没有实现接口的时候,则它的动态代理类是通过CGLIB来实现的,CGLIB通过继承被代理类并重写public和protect方法来实现代理类。因此被当注解写在private方法上是不会生效的。同时这个类要实现AOP就必须是一个容器管理的Bean,即方法所在的类会被生成一个Bean实例(被@Compoment等注解的类)