您的位置:首页 > 编程语言 > Java开发

Java反射及AOP笔记 (Java高新技术)

2010-12-29 13:30 211 查看

反射

1. Class类是反射的基础,
Class
类的实例表示正在运行的 Java 应用程序中的类和接口。
a) 得到字节码中对应的实例对象的方法:
i. Class.forName(String className);
ii. 对象名.getClass();
iii. 类名.class;
2. 反射:反射就是把Java类中的各种成分映射成相应的Java类。(我的理解:可以同过反射得到已经load到内存中的代码并对其进行调用)
3. 数组的反射:所有具有相同元素类型和维数的数组都共享该
Class
对象。
4. 作用:实现框架的功能。

动态代理和AOP

代理的概念与作用

1. 生活中的代理
a) 就是代理商
2. 程序中的代理
a) 要为已存在的多个具有相同接口的目标类的各个方法增加一些系统功能,例如,异常处理、日志、计算方法的时间、事务管理等等,如何做?
b) 编写一个与目标类具有相同接口的代理类,代理类的每个方法调用目标类的相同方法,并在调用方法时加上系统功能的代码。
c) 如果采用工厂模式和配置文件的方法进行管理,则不需要修改客户端程序,在配置文件中配置是使用目标类还是代理类,这样以后很容易切换,比如,想要日志功能时就配置代理类,否则配置目标类,这样,增加系统功能很容易,以后运行一段时间后,又想去掉系统功能也很容易。

代理架构图

1.



AOP

1. 系统中存在交叉业务,一个交叉业务就是要切入到系统中的一个方面,如下所示:
安全 事务 日志
a) Student Service ----------|-----------|----------|----------
b) CourseService ----------|-----------|----------|----------
c) MiscService ------------|-----------|----------|----------
2. 用具体的程序代码描述交叉业务:
a) method1 method2 method3
b) { { {
c) ------------------------------------------------切面
d) ------ -------- ------
e) ------------------------------------------------切面
f) } } }
3. 交叉业务的编程问题即为面向方面的编程(Aspect oiented program ,简称AOP),AOP的目标就是要使交叉业务模块化。可以采用将切面代码移动到原始方法的周围,这与直接在方法中编写切面代码的运行效果是一样的。如下所示:
a) --------------------------------------------------切面
b) func1 func2 func3
c) { { {
d) --- --- ---
e) } } }
f) -------------------------------------------------切面
4. 使用代理技术正好可以解决这种问题,代理是实现AOP功能的核心和关键技术。

动态代理技术

1. 要为系统中的各种接口的类增加代理功能,那将需要太多的代理类,全部采用静态代理方式,将是一件非常麻烦的事情!写成百上千个代理类,太累了!
2. JVM可以在运行期动态生成出类的字节码,这种动态生成的类往往被用作代理类,即动态代理类。
3. JVM生成的动态代理类必须实现一个或多个接口,所以,JVM生成的动态类只能用作具有相同接口的目标类的代理类。
4. CGLIB库可以动态生成一个类的子类,一个类的子也可以用作该类的代理,所以,如果要为一个没有实现接口的类生成动态代理类,那么可以使用CGLIB库。
5. 代理类的各个方法中通常除了要调用目标的相应方法和对外返回目标返回结果外,还可以在代理方法中的如下四个位置加上系统功能代码:
a) 在调用目标方法之前
b) 在调用目标方法之后
c) 在调用目标方法前后
d) 在处理目标方法异常的catch块中
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: