通过代码实例跟我学面向方面编程从入门到精通——在项目中实现springaop的around类型通知advice的应用实例内容摘要:
nageInterface oneAccountInfoManageBeanProxy= (AccountInfoManageInterface) ()。 (12345678,)。 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 10/21 页 (12345678,2345678,1000.0f)。 } public static void main(String[] args) { new TestLogInterceptorBySpringAOP()。 } } 注意: 此 种 方式的代码相对比较复杂 因为,需要我们自己来获得代理组件类的对象实例和指定目标拦截器对象等方面的工作。 ( 4) 执行 测试类的 代码,将产生出下面的结果。 “采用 Spring IoC 技术中的依赖注入”的方法测试本示例的应用效果 ( 1) 本 方法 的实现原理 采用 Spring XML 配置文件定义各个组件 ( 声明式 AOP 可使用 ProxyFactoryBean)。 ( 2)测试类 TestLogInterceptorBySpringAOP 的代码示例 package。 import。 import。 import。 public class TestLogInterceptorBySpringAOP { 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 11/21 页 public TestLogInterceptorBySpringAOP() { AccountInfoManageInterface oneAccountInfoManageBeanProxy=null。 ApplicationContext ctx=new ClassPathXmlApplicationContext()。 // ApplicationContext ctx=new FileSystemXmlApplicationContext()。 oneAccountInfoManageBeanProxy = (AccountInfoManageInterface) (oneAccountInfoManageBeanProxy)。 (12345678,)。 (12345678,2345678,1)。 } public static void main(String[] args) { new TestLogInterceptorBySpringAOP()。 } } 我们在代码中利用 FileSystemXmlApplicationContext 类或者ClassPathXmlApplicationContext 来读入和处理 *.xml 的配置文件,并获得一个创建工厂的对象 context( ApplicationContext 类型)。 因为在 Spring 中, Spring 管理的对象都必须通过这个 ApplicationContext 工厂来创建或者通过注入的方式来获得。 对象通过工厂创建后便可正常使用。 ( 3) 执行 本示例的测试代码 此时,将在 Eclipse 的控制台窗口中出现下面的提示。 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 12/21 页 从上面的显示结果中可以清楚地看到,在目标方法的 调用前和调用后 而这正是我们前面所希望达到的目的,我们的日志处理器都被执行了。 并且采用 XML 配置的方式比直接采用编程的方式要简单。 注意: 利用上面 的 around 形式的通知 ,我们不仅可以实现上面类似功能要求的实现。 同时也可以利用该方式来达到 改变应用 系统中 的 某个组件类的 常规行为 比如 重写 组件类中某一个方法 的原始功能实现,但又不需要对原始功能类的代码直接进行修改。 在应用 Arround 类型的拦截器时一定要在拦截器中对原始的业务方法(也就是 被拦截的目标方法)进行调用,否则原始的业务方法没有执行。 package。 import。 import。 import。 import。 public class LogInterceptor implements MethodInterceptor { private Logger logger = (().getName())。 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 13/21 页 public LogInterceptor() { } public Object invoke(MethodInvocation methodInvocation) throws Throwable { boolean methodReturnBoolean=false。 Object returnResult =null。 String methodName=().getName()。 (, methodName+ 功能方法开始执行 ... + ())。 try { (500)。 } catch (InterruptedException e) { ()。 } try{ returnResult = ()。 methodReturnBoolean=((Boolean)returnResult).booleanValue()。 try { (500)。 } catch (InterruptedException e) { ()。 } } finally{ if(methodReturnBoolean){ (, methodName+功能方法执行结束,并且已经成功地执行了。 + () + \n)。 } else{ (, methodName+方法执行结束,并且执行失败。 + 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 14/21 页 () + \n)。 } } return returnResult。 //一定要将目标方法的返回结果继续向上返回。 } } 同时也还应该要注意将原始方法的执行结果也“原样”返回给上层的程序。 1 课后作业: 利用 Arround 类型的拦截器的原理,设计一个实现“事务控制”的拦截器,实现对项目中的各个 DAO 进行统一的事务控。通过代码实例跟我学面向方面编程从入门到精通——在项目中实现springaop的around类型通知advice的应用实例
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。