一、Java编程使用的背景
也不能算是使用的背景,最多只能算是一个在什么条件下面我想到了使用动态代理实现AOP的拦截功能):因为在项目中程序的结构是使用SOAP调用JNI,因此在SOAP服务端里面没有任何实现代码,仅仅是new一个JNI的对象,然后调用JNI对应的方法。但是在调用JNI方法之前需要对传进 JNI的JavaBean 进行初始化,而且还需要记录日志。而SOAP服务端的代码是通过ant自动生成的,需要对他进行手工的修改,在修改过程中发现每一个方法里面都是相同的:记录进入方法的日志、初始化JavaBean和记录退出方法的日志,这写东西都是通过拷贝粘贴来完成的,想到如果以后再加一个什么功能的时候又得每一个方法进行拷贝粘贴,而且方法的数量还不少,所以觉得这样来实现是不科学的。示例代码如下:
1.public class SOAP{
2.
3.private JniInterface jni = null;
4.
5.private Log log = 。。。;
6.
7.public SOAP(){
8.
9.jni=new JniClass();
10.
11.}
12.
13.
14./**方法A**/
15.
16.public JavaBeanA aMethod(JavaBeanA javaBeanA){
17.
18.log.debug("进入A方法");
19.
20.//初始化JavaBean
21.
22.Init(javaBeanA);
23.
24.//调用JNI对应的方法
25.
26.JavaBeanA result = jni.aMethod(javaBeanA);
27.
28.log.debug("退出A方法");
29.
30.return result;
31.
32.}
33.
34.……………………………………
35.
36.……………………………………
37.
38.等等,很多这样的方法
39.
40.……………………………………
41.
42.……………………………………
43.
44.}
45.
从示例代码里面可以看出,除了调用JNI对应的方法不同之外,其他的都是相同的代码,把所有的东西进行拷贝复制是不合理的。每当对SOAP进行修改,就必须将所有的方法重新拷贝粘贴。为了省去拷贝粘贴这一工序,所以使用动态代理实现AOP拦截共能。