什么是AOP?
AOP(Aspect Oriented Programming),面向切面编程,AOP不是单独指某一种技术,而是一种编程思想,AOP是OOP的一种补充,用于处理各个业务逻辑中的横切关注点,比如日志记录,事务处理,性能统计,异常处理等等。
AOP的主要功能是将大量的通用行为从业务逻辑中抽取出来,将这些行为封装成独立的非业务方法,用于横向切入,这些行为不会对已有的业务逻辑产生任何影响。
AOP是一种设计思想,而Spring AOP则是符合AOP思想的一种框架实现。
spring AOP的两种动态代理方式
JDK动态代理:利用拦截器(拦截器必须实现InvocationHander)加上反射机制生成一个时间代理接口的匿名类,在调用具体方法前调用InvokeHander来处理。只能对实现了接口的类生成代理。
CGLib动态代理:利用ASM开源包,对代理对象类的class文件加载进来,通过修改字节码生成子类来处理。(可以在运行时动态生成某个类的子类,所以如果需要被Cglib动态代理,那么就需要被代理类不能被final修饰)。
AOP(Aspect Oriented Programming),面向切面编程,AOP不是单独指某一种技术,而是一种编程思想,AOP是OOP的一种补充,用于处理各个业务逻辑中的横切关注点,比如日志记录,事务处理,性能统计,异常处理等等。
AOP的主要功能是将大量的通用行为从业务逻辑中抽取出来,将这些行为封装成独立的非业务方法,用于横向切入,这些行为不会对已有的业务逻辑产生任何影响。
AOP是一种设计思想,而Spring AOP则是符合AOP思想的一种框架实现。
spring AOP的两种动态代理方式
JDK动态代理:利用拦截器(拦截器必须实现InvocationHander)加上反射机制生成一个时间代理接口的匿名类,在调用具体方法前调用InvokeHander来处理。只能对实现了接口的类生成代理。
CGLib动态代理:利用ASM开源包,对代理对象类的class文件加载进来,通过修改字节码生成子类来处理。(可以在运行时动态生成某个类的子类,所以如果需要被Cglib动态代理,那么就需要被代理类不能被final修饰)。