ioc和aop的理解
AOP编程概述
AOP(Aspect-Oriented Programming)是面向对象编程的一种补充,主要应用于处理具有横切性质的系统级服务。这些服务如日志收集、事务管理、安全检查、缓存及对象池管理等,能够通过AOP实现模块化处理,提高代码的可维护性和可读性。
AOP的核心概念
AOP代理:AOP实现的关键在于AOP框架自动创建的代理。这些代理分为静态代理和动态代理。静态代理在编译阶段就生成了AOP代理类,而动态代理则在运行时借助JDK或CGLIB等技术在内存中生成代理类。
Pointcut(切点):基于正则表达式的表达式,用于选取程序中的执行点或执行点集合。
JoinPoint(连接点):被Pointcut选中的具体执行点。
Advice(通知):在选定的JoinPoint上执行的操作或逻辑。
Aspect(切面):关注点的模块化表示。它是一个抽象概念,代表应用程序不同模块中的某个领域或方面。一个Aspect由Pointcut和Advice组成。
Weaving(编织):将切面应用到目标对象的过程,以创建新的被建议的对象。
AspectJ框架介绍
AspectJ是一个功能强大的AOP框架,它易学易用,并可无缝地扩展Java平台。它提供了无缝的面向切面编程扩展,使Java开发者能够轻松地实现横切关注点的模块化。
AspectJ的特性与使用
AspectJ可使用专门的编译器ajc进行编译,与Java的javac编译器类似。在Spring框架中,AOP是一个主要功能,而AspectJ常常与Spring AOP相比较。
Spring AOP与AspectJ的比较
2. 性能差异:Spring AOP基于动态代理,在容器启动时生成代理实例,可能会增加方法调用的栈深度,因此性能上可能不如AspectJ。
3. 使用范围与依赖:Spring AOP需要依赖IOC容器管理,且只能作用于Spring容器。而AspectJ则可独立使用,也可整合到其他框架中。
织入时机与方法
AspectJ支持多种织入时机,如编译期织入、编译后织入和类加载后织入。每种织入方式都有其适用的场景和实现方法。