5.11.12 使用ProxyFactoryBean代理定义配置文件config.xml
改写Spring的配置文件 exception_config.xml,主要用来使用Spring的ProxyFactoryBean代理功能,对Logic1.java只记录程序执行时间,不捕获发生的异常,对Logic2.java只捕获发生的异常,不记录程序执行时间,去掉前面的自动代理。 exception_config.xml的示例代码如下:
"http://www.springframework.org/dtd/spring-beans.dtd">
5.11.13 编写测试类Logic1的程序TestAop.java
这里先改写对业务逻辑Logic1.java的演示。TestAop.java的示例代码如下:
//******* TestAop.java**************
package com.gc.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import com.gc.impl.LogicInterface;
public class TestAop {
public static void main(String[ ] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
//通过ApplicationContext获取配置文档
ApplicationContext actx=new FileSystemXmlApplicationContext("exception_config.xml");
LogicInterface logic = (LogicInterface)actx.getBean("logic1Proxy");
//模拟执行新增、修改和删除方法
try {
logic.doInsert("张三");
logic.doUpdate("李四");
logic.doDelete("王五");
} catch (Exception ex) {
}
}
}
5.11.15 编写测试类Logic2的程序TestAop.java
上面主要是针对业务逻辑Logic1.java的测试,所以在记录的信息中,只显示了每个方法的执行时间,而没有捕获删除方法抛出的异常信息,对于业务逻辑Logic2.java的测试,使其只捕获删除方法抛出的信息,而不记录每个方法执行的时间,需要修改测试代码TestAop.java。TestAop.java的示例代码如下:
//******* TestAop.java**************
package com.gc.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import com.gc.action.Logic2;
public class TestAop {
public static void main(String[ ] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
//通过ApplicationContext获取配置文档
ApplicationContext actx=new FileSystemXmlApplicationContext("exception_config.xml");
Logic2 logic2 = (Logic2)actx.getBean("logic2Proxy ");
//模拟执行新增、修改和删除方法
logic2.doInsert("张三");
logic2.doUpdate("李四");
logic2.doDelete("王五");
}
}
5.12 小 结
本章首先从AOP的基本思想讲起,接着对Java的动态代理机制进行了讲解,然后讲解了AOP的3个重要概念,又使用不同的通知分别实现了日志输出的示例,最后通过一个完整的实例使读者更全面地了解了Spring中的AOP。
因为AOP在技术和思想上都还没有完全成熟,如果大量地应用AOP可能会有一定的负面作用,可能会达不到开发者的初衷,使得代码更难以理解。因此,要适度地使用AOP。
总的来说,AOP编程的实质就是:业务逻辑不再实现横切关注点,而是由单独的类来封装。当业务逻辑需要用到封装的横切关注点时,AOP会自动把封装的横切关注点插入到具体的业务逻辑中。