面向侧面的程序设计 方林博士 本文下载地址:

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

Java 程序分类 Java Application :是完整程序,需要独立的解 释器解释运行;以 “.java” 为后缀的文件,以 main() 方法作为程序入口,由 java 编译器编译生 成字节码,由 Java 解释器加载执行字节码。 Java Applet 没有 main() 方法作为程序入口,是嵌在.
面向对象程序设计 、. 第二章 面向对象的分析与设计 学习目标 1 确定系统中的对象 2 确定对象的属性及操作 3 测试对象的有效性 4 区分对象和类 5 了解面向对象的编程和过程化编程之间的区别 6 了解封装的主要好处 7 了解软件开发的主要步骤.
第四章 类、对象和接口.
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
第 9 章 物件的建構.
项目6 通用堆栈.
第16章 代理模式 Website:
C语言程序设计 李伟光.
教學經驗分享 吳毅成 國立交通大學資訊工程系 2012年4月.
Java程序设计教程 第一讲 Java概述.
四資二甲 第三週作業 物件導向程式設計.
面向对象的程序设计(一).
方林博士 面向对象的程序设计 方林博士
第二章 JAVA语言基础.
類別與物件 Class & Object.
類別的繼承-一般關係: 繼承是宣告的類別繼承現存類別的部份或全部的成員資料和方法 , 新增額外的成員資料和方法或覆寫和隱藏繼承類別的方法
Ch07 介面與多重繼承 物件導向程式設計(II).
JAVA程序设计 (03) JAVA Programming
第5章 Java中类、对象、接口 及包的概念 5.1 类的基本概念 5.2 类的继承概念 5.3 抽象类和接口 5.4 包.
外观模式.
Design Pattern (2) 设计模式(2) Institute of Computer Software 2018/9/21
Ch08 巢狀類別 物件導向程式設計(II).
程式設計實作.
第5章 异常处理 王德俊 上海交通大学继续教育学院.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
例外處理(Exception Handling)
Java基础 JavaSE异常.
Classes Lecturer: 曾學文.
第六章 类的扩展与继承.
第一个Android程序 本讲大纲: 1、创建Android应用程序 2、Android项目结构说明 3、运行Android应用程序
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
2018/12/3 面向对象与多线程综合实验-网络编程 教师:段鹏飞.
职责链模式.
Java语言程序设计 第五部分 Java异常处理.
面向对象程序设计 、.
Java程序设计 第9章 继承和多态.
類別的繼承 Vehicle Car.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
C/C++/Java 哪些值不是头等程序对象
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
简单工厂模式.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
第14章 外观模式 Deng Song
Multithread 多執行緒 以GUI為例了解物件以及Event
面向对象 程序设计语言基础 马骏
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第二章 Java基本语法 讲师:复凡.
第7章 异常处理.
Aspect Oriented Programming
实验七 安全FTP服务器实验 2019/4/28.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
主编:钟元生 赵圣鲁.
第二章 Java语法基础.

第二章 Java基本语法 讲师:复凡.
第二章 Java基本语法 讲师:复凡.
方法進階及物件導向基礎 Lecturer: 楊昌樺.
第6章 面向对象的高级特征 学习目标 本章要点 上机练习 习 题.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
方格紙上畫正方形.
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
判斷(選擇性敘述) if if else else if 條件運算子.
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
第6章 继承和多态 伍孝金
Summary
Presentation transcript:

面向侧面的程序设计 方林博士 本文下载地址:

什么是 AOP AOP , Aspect-Oriented Programming AOP 的目的:系统在运行用户的函数之前和之后希 望能进行一些统一操作,例如: – 读写日志 – 打开或关闭数据库连接 – 启动或终止事务 (Transaction) – 权限验证 – 统计汇总 AOP 是一种用于开发系统软件或平台软件的技术 AOP 对所有相关函数统一发挥作用

用户的目的 (AOP 要解决的问题 ) public interface UserInterface { public void userMethod(); } public class UserClass extends UserInterface public void userMethod() { …… } } UserInterface userObject = new AOPUserClass(); userObject.userMethod(); 用户 ( 即程序员 ) 希望系统能够在 调用这个函数之前自动地启动一个 数据库连接,调用完毕之后则能自 动地关闭这个数据库连接。

AOP 程序的用户 一般程序的用户就是使用该程序的最终用 户。但用 AOP 技术开发出来的程序的用户是 程序员而不是最终用户。即程序员可以利 用这些 AOP 程序使自己的函数在被调用前后 能够自动地做些事情。

如果没有 AOP public interface UserInterface { public void userMethod(); } public class UserClass extends UserInterface public void userMethod() { …… } } public class AOPUserClass extends UserClass public void userMethod() { 打开数据库连接 ; super.userMethod(); 关闭数据库连接 ; } UserInterface userObject = new AOPUserClass(); userObject.userMethod(); 开发人员将不 得不为每一个 UserClass 创建 一个子类

致命的细节 打开数据库连接 ; super.userMethod(); 关闭数据库连接 ; 打开数据库连接 ; try { super.userMethod(); } finally { 关闭数据库连接 ; }

Java 如何实现 AOP InvocationHandler Proxy java.lang.reflect UserClass UserInterface Method UserInvocationHandler Java 约定:只 有在接口中声 明的函数才能 被 AOP 化。

Java 的 InvocationHandler package java.lang.reflect; public interface InvocationHandler { object invoke(Object proxy, Method method, Object[] args); }

Java 的 Proxy package java.lang.reflect; public class Proxy { public static object newProxyInstance( ClassLoader classLoader, Class[] interfaces, InvocationHandler handler) { …… } }

public class UserInvocationHandler implements InvocationHandler { UserInterface userObject; public UserInvocationHandler(UserClass userObject) { this.userObject = userObject; public object invoke(Object proxy, Method method, Object[] args) { 打开数据库连接 ; method.invoke(this.userObject, args); 关闭数据库连接 ; } UserInterface userObject = new UserClass(); UserInterface userProxy = (UserInterface) Proxy.newProxyInstance( classLoader, new Class[] { UserInterface.class }, new UserInvocationHandler(userObject) ); userProxy.userMethod();

谢谢大家 方林 本文下载地址: