您的位置:首页 > 编程语言

AOP(面向切面编程)

2018-01-11 00:31 169 查看
泛型依赖注入:



面向切面要解决的问题:

1、代码混乱:越来越多的非业务需求(日志、验证等)的加入使得业务方法变得急剧膨胀,每个方法在处理核心业务逻辑的同时还要兼顾其他多个关注点。

2、代码分散:以日志需求为例,为了实现这个单一需求,不得不在模块或方法中书写重复的日志代码,如果日志需求一旦发生变化,不得不修改所有的日志代码

使用动态代理解决上述问题:

代理设计模式的原理:使用一个代理将对象包装起来,然后用该代理对象取代原始对象,任何对原始对象的调用都要经过代理对象,代理对象决定将方法调用转到原始对象上面

面向切面原理(基于注解的方式和xml方式):

1、AOP(Aspect Oriented Programming)是一种新的方法论,是对传统OOP的补充

2、AOP的主要编程对象是“切面(Aspect)”,而切面模块化横切关注点

3、在进行AOP编程时,任然需要定义公共功能,但可以明确的定义这个公共功能在哪里以及如何应用。不必修改受影响的类,这样一来横切关注点就被模块化到对象(切面)里面。

AOP的好处:

1、每个事物逻辑位于一个位置,代码不分散,便于维护和升级

2、业务模块更简洁,只包含业务核心代码

实现步骤:





面向切面有五个通知类型:

1、环绕通知:包含前置、后置、返回、异常通知,类似于动态代理的全过程:



切面优先级问题:

注解:order:越小,优先级越高

定义一个方法。用于声明切入点表达式,一般地,该方法中不在写其他的代码

@Pointcut(“execution(* com.spring.aop.impl..(int,int))”)

public void declareJoinPoint(){}

@Before(“declareJoinPoint()”) // 引用了声明的切入点表达式(不同包下,可用包路径)

public void boforeMethod(JoinPoint joinPoint){

String methodName = joinPoint.getSignature().getName();

List args = Arrays.asList(joinPoint.getArgs());

System.out.println(“The method “+methodName+” begin with “+ args);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: