最爱Java
书山有路勤为径,学海无涯苦作舟
《AspectJ Cookbook》读书笔记十六: 增强类和编译器
本章节说明了如何使用静态横切技术,以静态方式使用AspectJ中的方面把行为和接口引入现有的类中。使用这些技术,可以扩展类来实现接口,从新的父类扩展类,引入新方法和属性,减轻说发生异常的影响,以及继承多个基类。
一.扩展现有的类
package
com.aspectj;
public
aspect ExtendClassRecipe
{
private
int
MyClass.newVariable
=
20
;
public
int
MyClass.bar(String name)
{
System.out.println(
"
In bar(String name) , name:
"
+
name);
return
this
.newVariable;
}
}
示例中将属性newVariable和方法bar(String)添加到了MyClass类中。
二.声明类之间的继承关系
使用declare parents语句,指定特定的类是从另一个类扩展而来。
以下代码说明了如何为MyClass类指定新的继承关系
package
com.aspectj;
public
aspect IntroduceInheritanceRecipe
{
declare parents:MyClass
extends
AnotherClass;
}
三.使用方面实现接口
使用declare parents语句,指定特定的类实现特定的接口。
package
com.aspectj;
public
aspect ImplementInterfaceRecipe
{
declare parents:MyClass
implements
MyInterface;
}
把接口应用于现有类的能力允许通过接口类型的引用那个类的对象,如:
//
Create an instance of MyClass
MyInterface myObject
=
new
MyClass();
//
//
Work with the interface reference
myObject.foo(
1
,
"
Russ
"
);
四.声明默认的接口实现
package
com.aspectj;
public
aspect DefaultInterfaceImplementationRecipe
{
declare parents:MyClass
implements
MyInterface;
//
public void MyInterface.bar(String name) {
//
System.out.println("bar(String) called on " + this);
//
}
}
五.减轻异常的影响
使用declare soft语句,可以指定一组应该减轻其影响的异常--也就是说,在通过特定连接点选择的连接点上引发这些异常时,将其转换成未捕获的异常。
示例中说明了减轻在void foo()方法上引发的ExcepionA异常的影响,使得该方法的用户不必关心如何处理这个异常。
package
com.aspectj;
public
aspect SoftExceptionRecipe
{
pointcut callPointCut() : call(
void
MyClass.foo());
declare soft : ExceptionA : callPointCut();
}
六.扩展编译
分别使用declare error或declare warning语句,指定应该引发编译器错误或警告的条件。
示例说明了如何声明一个新的错误和警告,如果在正在编译的应用程序内发现指定的条件,编译器就会引发该错误或警告。
package
com.aspectj;
public
aspect CompilaionAdviceRecipe
{
declare error:call(
void
ProtectedAccessClass.setValue(
int
)) :
"
Must only set the ProtectedAccessClass.value from a MyClass object
"
;
declare warning:call(
void
ProtectedAccessClass.getValue()) :
"
Should only be reading ProtectedAccessClass.value from a MyClass object
"
;
}
posted on 2008-08-27 09:31
Brian
阅读(465)
评论(0)
编辑
收藏
所属分类:
《AspectJ Cookbook》读书笔记
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
《AspectJ Cookbook中文版》的附带示例下载
《AspectJ Cookbook》读书笔记六: 捕获通知上的连接点
《AspectJ Cookbook》读书笔记二十二: 应用企业级方面
《AspectJ Cookbook》读书笔记二十一: 应用应用程序级方面
《AspectJ Cookbook》读书笔记二十: 应用类和组件级方面
《AspectJ Cookbook》读书笔记十九: 实现行为型面向对象设计模式
《AspectJ Cookbook》读书笔记十八: 实现结构型面向对象设计模式
《AspectJ Cookbook》读书笔记十七: 实现创建型面向对象设计模式
《AspectJ Cookbook》读书笔记十六: 增强类和编译器
《AspectJ Cookbook》读书笔记十五: 定义方面的关系
公告
导航
BlogJava
首页
新随笔
联系
聚合
管理
<
2008年8月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
统计
随笔 - 52
文章 - 0
评论 - 34
引用 - 0
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(4)
给我留言
查看公开留言
查看私人留言
随笔分类
《AspectJ Cookbook》读书笔记(24)
(rss)
EXTJS(1)
(rss)
Jakarta Commons笔记(3)
(rss)
JScript(11)
(rss)
Struts2(4)
(rss)
数据结构与算法(2)
(rss)
自编小工具(1)
(rss)
随笔档案
2010年11月 (2)
2010年10月 (2)
2009年10月 (13)
2009年1月 (3)
2008年12月 (1)
2008年8月 (18)
2008年7月 (2)
2008年6月 (4)
收藏夹
Java中的字符集编码入门(6)
(rss)
搜索
最新评论
1. re: Struts2学习笔记——输入校验(二)
ValidatorType.FIELD是什么意思呢?
--caipc
2. re: ExtJs----弹出窗口
dsfsdfsdfsdf
--dgd
3. re: javascript面向对象技术基础(二)
@zx
什么意思?
--cxs
4. re: javascript面向对象技术基础(二)
rtwtwatwatst
--zx
5. re: 《AspectJ Cookbook中文版》的附带示例下载[未登录]
谢谢
--jacky
阅读排行榜
1. ExtJs----弹出窗口(5571)
2. ExtJs----Grid笔记(4760)
3. ExtJs----拖放(3105)
4. ExtJs----Ext支持的控件(2954)
5. ExtJs----布局(2818)
评论排行榜
1. 《AspectJ Cookbook中文版》的附带示例下载(12)
2. 插入排序思路与泛型版本的实现(4)
3. 归并排序思路与泛型版本的实现(3)
4. 自编的"个人求职管理"小工具(2)
5. 《AspectJ Cookbook》读书笔记四: 捕获方法上的连接点(2)