一个用Spring AOP实现异常处理和记录程序执行时间的实例(二)

 

5.11.12  使用ProxyFactoryBean代理定义配置文件config.xml

改写Spring的配置文件 exception_config.xml,主要用来使用SpringProxyFactoryBean代理功能,对Logic1.java只记录程序执行时间,不捕获发生的异常,对Logic2.java只捕获发生的异常,不记录程序执行时间,去掉前面的自动代理。 exception_config.xml的示例代码如下:

 "http://www.springframework.org/dtd/spring-beans.dtd">

 

 

 

 

 

 

 

       

           

       

       

            .*.*

       

 

 

 

 

        

           

       

       

       

            .*.*

       

       

            com.gc.impl.LogicInterface

       

       

           

       

       

           

                timeHandlerAdvisor

           

       

   

   

       

            true

       

       

           

       

       

           

                exceptionHandler

           

       

   

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.javaTestAop.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的动态代理机制进行了讲解,然后讲解了AOP3个重要概念,又使用不同的通知分别实现了日志输出的示例,最后通过一个完整的实例使读者更全面地了解了Spring中的AOP

因为AOP在技术和思想上都还没有完全成熟,如果大量地应用AOP可能会有一定的负面作用,可能会达不到开发者的初衷,使得代码更难以理解。因此,要适度地使用AOP

总的来说,AOP编程的实质就是:业务逻辑不再实现横切关注点,而是由单独的类来封装。当业务逻辑需要用到封装的横切关注点时,AOP会自动把封装的横切关注点插入到具体的业务逻辑中。

 

你可能感兴趣的:(网络编程,aop,spring,exception,bean,class,测试)