SpringAOP 之动态代理

本贴最后更新于 2118 天前,其中的信息可能已经事过景迁

一、SpringAOP

8f71f78b849f4464a5e73093203e0807.png

⒈ AOP

Aspect Oriented Programming 面向切面编程, 实现的是核心业务和非核心业务之间的的分离,让核心类只做核心业务,代理类只做非核心业务。

⒉ 目的

  1. 把核心业务和非核心业务进行分离。

  2. 把多个非核心业务处理(点)变成一个切面(之前的非核心业务代码需要写多次变成只需要写一次。

  3. 要求:只有当核心类中有多个业务需要进行处理的时候使用 AOP 较为合理,如果只有一个业务需要被处理那么就没有必要使用 AOP 了。

二、动态代理

  1. 不需要知道核心类(被代理类)具体是什么类。

  2. 非核心类(代理类)需要实现 InvocationHandler 接口。

在原有的静态代理的基础上进一步的完善,由于静态代理中,重复写了相同的代码使得代码的整体结构显得冗余,而且还不同的核心类还需要有不用的代理类,是写死了的具体的类。所以需要使用动态代理来代替静态代理
  

三、动态代理示例

1. 业务介绍

假定高三学生为核心类,学生的家人是代理类。高三学生需要做的核心业务有:在家学习(studyAtHome)、在学校学习(studyAtHome);家人需要做的非核心业务为:准备饭菜(买、洗、炒、煮饭)。准备补品(购买、熬制、加佐料)。

2. 具体代码

github 地址:https://github.com/tsgkim/JavaBasic/tree/master/JavaBasic/src/com/basic/tu/proxy/myDynamic

(1) 创建一个高三学生的接口(G3Student)

(2) 创建一个高三学生实现类:G3Student_boy,并且这个类实现高三学生接口(G3Student)
(3) 创建一个高三学生的代理类(G3StudentHandler),并且实现了 InvocationHandler 接口
(4) 测试
(5) 结果
代理:准备买菜
代理:准备洗菜
代理:准备炒菜
代理:准备煮饭
-----------------
小明在SCHOOOL学习
-----------------
代理 :购买补品
代理 :熬制部品
代理 :加入佐料

代理:准备买菜
代理:准备洗菜
代理:准备炒菜
代理:准备煮饭
-----------------
小明在HOME学习
-----------------
代理 :购买补品
代理 :熬制部品
代理 :加入佐料
转载自:http://www.cnblogs.com/demoMeng/p/5881473.html
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    944 引用 • 1459 回帖 • 17 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • someone756

    我了个大曹,厉害了.:slightly_smiling::slightly_smiling: