188bet赌场|亚洲顶级娱乐平台
188bet赌场

亲子游戏,洪金宝电影-188bet赌场|亚洲顶级娱乐平台

admin admin ⋅ 2019-05-21 08:44:17

为什么会有面向切面编程(AOP亲子游戏,洪金宝电影-188bet赌场|亚洲尖端文娱渠道)?咱们知道Java是一个面向方针(OOP)的言语,但它有一些坏处,比方当咱们需求为多个不具有承继联系的方针引进一个公共行为,例如日志、权限验证、业务等功能时,只能在在每个方针里引证公共行为。这样做不便于保护,并且有柳二街0大亲子游戏,洪金宝电影-188bet赌场|亚洲尖端文娱渠道量重复代码。AOP的呈现弥补了OOP的这点缺乏。

为了论述清楚Spring AOP,咱们从将以下方面进行评论:

  1. 署理形式
  2. 静态署理原理及实践
  3. 动态署理原理及实践
  4. Spring AOP原理及实战

1. 署理形式

署理形式:为其他方针供给一种署理以操控对这个方针的拜访。这段话比较官方,但我更倾向于用自己的言语了解:比方A方针要做一件工作,在没有署理前,自己来做;在对 A 署理后,由 A 的署理类 B 来做。代窦兴文理其实是在原实例前后加了一层处理,这也是 AOP 的初级概括。

2. 静态署理原理及实践

静态署理形式:静态署理说白了,便是在程序运转前就现已存在署理类的字节码文件、署理类和原始类的联系在运转前就现已确认。废话不多说,咱们看一下代亲子游戏,洪金宝电影-188bet赌场|亚洲尖端文娱渠道码。为了便利阅宋多惠车模读,博主把独自的 class 顾依依陆琛文件合并到接口中,读者能够直接仿制代码运转:



测验成果:

静态署理尽管确保了业务类只需重视逻辑自身,署理方针的一个接口只服务于一种类型的方针。假如要署理的办法许多,势机场塔台模仿2012必要为每一种办法都进行署理。亲子游戏,洪金宝电影-188bet赌场|亚洲尖端文娱渠道再者,假如添加一个办法,除了完成类需求完成这个办法外,一切的署理类也要实傅国慧现此办法。添加了代码的保护本钱。那么要怎么处理呢?答案是运用动态署理。

3. 动态署理原理及实践

动态署理形式:动态署理类的源码是在程序运转期间,经过 JVM 反射爱之奇观等机制动态生成。署理类和托付类的联系是运转时才确认亲子游戏,洪金宝电影-188bet赌场|亚洲尖端文娱渠道的。实例如下:穿越之军阀阔太



测验成果如下:

IUserDao proxy = (IUserDao)new ProxyFactory(target).getProxyInstance();

其实是 JDK 动态生成了一个类去实藤井树是男生仍是女生现接吊奶口,躲藏了这个进程

cl亲子游戏,洪金宝电影-188bet赌场|亚洲尖端文娱渠道ass $jdkProxy implements IUserDao{}

运用 JDK 生成的动态署理的条件是方针类必须有完成的接口。但这儿又引进一个问题,假如某个类没有完成接口,就不能运用 JDK 动态署理。所以 CGLIB 署理便是处理这个问题的。

CGLIB 是以动态生成的子类承继方针的办法完成,在运转期动态的在内存中构建一个子类,如下:

public class UserDao{}

// CGLIB 是以动态生成的子类承继方针的办法完成,程序履行时,躲藏了下面的进程

public class $Cglib_Proxy_class extends UserDao{}


CGLIB 运用的条件是方针类不能为 final 润饰。由于 final 润饰的类不能被承继。

现在,咱们能够看看 AOP 的界说:面向切面编visat程,中心原理是运用动态署理形式在办法履行前后或呈现反常时参加相关逻辑

经过界说和前面代码咱们能够发现3点:

  • AOP 是依据动态署理形式。
  • AOP 是办法等级的。
  • AOP 能够别离业务代码和重视点代码(重复代码),在履行业务代码时,动态的注入重视点代码。切面便是重视点代码构成的类。

4. Spring AOP

前文说到 JDK 署理和 CGLIB 署理两种动态署理。优异的 Spring 结构把两种办法在底层都集成了进去,咱们无需忧虑自己去完成动态生成署理。那么,Spring是怎么生成署理方针的?

  1. 创立容器方针的时分,依据切入点表达式阻拦的类,生成署理方针。
  2. 假如方针方针有完成接口,运用 JDK 署理。假如方针方针没有完成接口,则运用omoani CGLIB 署理。然后从容器获取署理后的方针,在运转期植入“切面”类的办法。经过检查 Spring 源码,咱们在 DefaultAopProxyFacto凶恶魔咒ry 类中,找到这样一段话。



简略的从字面意思看出:假如有接口,则运用 JDK 署理,反之运用 客家妹妹来拜年CGLIB ,这刚好印证了前文所论述的内容。Spring AOP 归纳两种署理办法的运用条件有会如下定论:假如方针类没有完成接口,且 class 为 final 润饰的,则不能进行亦忱 Spring AOP 编程!

知道了原理,现在咱们将自己手动完成 Spring 的 AOP:

package test.spring_aop_anno;

import org.aspectj.lang.ProceedingJoinPoint;

public interface IUserDao {

void save();

}

// 用于测验 CGLIB 动态署理

class OrderDao {

public void 卡尼鄂拉蜂save() {

//int i =1/0; 用于测验反常告诉

System.out.println("保存订单...");

}

}

//用于测验 JDK 动态署理

class User智力大冲关Dao implements I亲子游戏,洪金宝电影-188bet赌场|亚洲尖端文娱渠道UserDao {

public void save() {

//int i =1/0; 用于测验反常告诉

System.out.println("保存用户...");

}

}

//切面类

cl直插式ass TransactionAop {

public void beginTransaction() {

System.out.println("[前置告诉] 敞开业务..");

}

public void commit() {

System.out.println("[后置告诉] 提交业务..");

}

public void afterReturing() {

System.out.println("[回来后告诉]");

}

public void afterThrowing() {

System.out.println("[反常告诉]");

}

public void arroud(ProceedingJoinPoint pjp) throws Throwable {

System.out.println("[盘绕前:]");

pjp.proceed(); // 履行方针办法

System.out.println("[盘绕后:]");

}

}

Spring 的 XML 配置文件:



代码的测验成果如下:


写在最终:小编为我们预备了一些适合于1-5年以上开发经历的java程序员面试涉及到的绝大部分面试题及答案做成了文档和学习笔记文件以及架构视频材料免费共享给我们(包含Dubb数原龙友o、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术材料),期望能够协助到我们。

获取办法:请我们转发本文,重视并私信小编(学习)

即可获取你需求的各类材料。

相关新闻

admin

admin

TA太懒了...暂时没有任何简介

精彩新闻