Aspect Oriented Programming

Slides:



Advertisements
Similar presentations
仪 容. 一、化妆的技巧 眼部的化妆 唇部化妆 眉部化妆 鼻部化妆 根据脸型化妆 根据脸型选发型.
Advertisements

3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
新闻写作基础知识 一. 新闻导语 二.新闻主体 三.新闻结构 四.角度选择.
项目6 通用堆栈.
第16章 代理模式 Website:
聰明小紅帽~ 自我身體保護 救國團新竹張老師 李 清 垣.
Java的程式架構與基本觀念 Java語言的歷史 Java程式的開發環境 Java程式的架構 輸出與輸入物件之使用 工具使用方法介紹
Java Programming Hygiene - for DIDC
OUTLINE Android app Devolpment Flow App反組譯解說 實例 簽名詳解 DalvikByteCode
第一章 面向对象程序设计.
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
程設一.
第二章 JAVA语言基础.
离职流程精细化标准推进材料 人事行政处.
類別與物件 Class & Object.
创意源自激情,技术成就梦想 畅翼创新俱乐部 2012年春俱乐部第三次技术培训 赵程.
AOP实践 演讲人:陈思荣.
第9章 单例模式 Website:
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
新聞報導 一、什麼是新聞? 1、狗咬人不是新聞,人咬狗才是新聞 2、大眾關切的事 3、讀者有興趣知道的事 4、接近性.
程式設計實作.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
API设计实例分析 通用IO API.
例外處理(Exception Handling)
Derived Class 前言 衍生類別的定義 單一繼承 public, protected, 和 privated 基底類別
Java基础 JavaSE异常.
Classes Lecturer: 曾學文.
第四次课后作业 1 问题描述: 将谜题定义为:包含一个初始位置,一个目标位置,以及用于判断是否是有效移动的规则集。
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
程式設計實作.
创建型设计模式.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Java语言程序设计 第五部分 Java异常处理.
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
Spring依赖注入及AOP简介.
SPOTO TM JAVA课程 JAVA中的OO语法
臺北市立大學 資訊科學系(含碩士班) 賴阿福 CS TEAM
并发机制 结果应该为: 线程 1: 1 线程 1: 2 线程 1: 3 线程 1: 4 线程 1: 5 线程 2: 6 线程 2: 7
第一次课后作业 1. C/C++/Java 哪些值不是头等程序对象 2. C/C++/Java 哪些机制采用的是动态束定
第九單元 Classes and data abstraction I
郑晟 昆明理工大学 云南省计算机技术应用重点实验室
异常及处理.
Java程序设计 第2章 基本数据类型及操作.
認識 Java.
第5讲 使用类和对象编程(三) 内部类 实例 程序控制结构 选择语句.
C/C++/Java 哪些值不是头等程序对象
Chapter 5 Recursion.
简单工厂模式.
透過YouTuBe API取得資料 建國科技大學 資管系 饒瑞佶 2018/1 V1.
第五讲 酒店客房管理系统(一) 教育部“十二五”职业教育国家规划教材
JAVA 编 程 技 术 主编 贾振华 2010年1月.
劉崇汎 崑山科技大學 電腦與通訊系 DLL的建立與引用 劉崇汎 崑山科技大學 電腦與通訊系
面向方面的软件开发方法 CSAI华东区首席顾问 徐 锋.
第7章 异常处理.
软件体系结构 (Software Architecture)
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
第五次课后作业 1 问题描述: 将谜题定义为:包含一个初始位置,一个目标位置,以及用于判断是否是有效移动的规则集。
102-2金融法規(2~4) ~03..
第二章 Java语法基础.

Review 1~3.
第二章 Java基本语法 讲师:复凡.
方法進階及物件導向基礎 Lecturer: 楊昌樺.
Java程序设计 第17章 异常和断言.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
面向对象程序设计 C++教程 西安工业大学 于帆.
第二章 Java基础语法 北京传智播客教育
Presentation transcript:

Aspect Oriented Programming AOP Aspect Oriented Programming

问题 考虑一个POS机的销售处理模块

如何处理权限问题 在处理一个销售的过程中,收银员可以执行启动销售等操作(startSale),如果需要修改销售的内容(changeSale)则需要由管理员执行。 如何处理权限问题? 在每段方法的开头加上权限处理的代码? 或者应该将ProcessSaleHandler分解为两个类?

第一种方法 问题: 在所有的业务代码中都混杂了权限相关代码(Code tangling) 与权限相关的代码分散在各处(Code scattering ) public ISale startSale() { if (securityManager.isFunctionValid4CurrentUser("startSale")) return new SaleMemImpl(); else throw new SecurityViolatedException("startSale"); }

第二种方法 类提供了一种层次化的分类方法,但问题是,他只能提供一个维度的分类方法

Security Aspect的实现(Spring) public class SecurityCheckAspect implements MethodInterceptor { ISecurityManager securityManager; public void setSecurityManager(ISecurityManager securityManager) { this.securityManager = securityManager; } @Override public Object invoke(MethodInvocation invocation) throws Throwable { String funcName = invocation.getMethod().getName(); if (securityManager.isFunctionValid4CurrentUser(invocation.getMethod().getName())) return invocation.proceed(); else throw new SecurityViolatedException(funcName);

Code tangling

Code scattering

N-dimensional concern

Security Aspect的实现(AspectJ) public aspect SecurityAspect { private ISecurityManager securityManager = SecurityManager.getInstance(); pointcut securedAccess(): execution ( * IUsecaseHandler+.*(..) ); //Advice before(): securedAccess(){ String functionName = thisJoinPoint.getSignature().getName(); if(!securityManager.isFunctionValid4CurrentUser(functionName)) throw new SecurityViolatedException(functionName); }

AOP Solution

结果 模块化 简洁

Terminology Cross-cutting – Identify areas of code where common functionality exists Joinpoint – Where one or more aspects can be applied Pointcut – A collection of joinpoints Advice – The code to be injected Aspect – General term for where advice and point-cuts are combined

Terminology Weaving – Integrating applications and aspects (e.g. AspectJ is an “aspect weaver”) Compile-time – Can produce integrated source-code, but typically only produces woven byte-code. Run-time – Aspects are applied “on the fly” (typically when classes are loaded)

Static Cross-cutting Element Type How to implement Comparable/Cloneable/Hashable without modify existing source