j2ee项目实训spring框架技术——第7章springaop中的advice通知第1部分内容摘要:

xyCreator class= property name=beanNames valueuserInfoManageBean,bbsInfoManagerBean/value /property property name=interceptorNames list valuecustomExceptionAdvice/value valuewebBBSInfoBeforeAdvisor/value valueuserInfoAfterReturningAdvisor/value valueuserInfoAroundAdviceAdvisor/value /list /property /bean 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 7/16 页 在本项目中应用了 Spring 框架 中实现“自动代理”功能的 BeanNameAutoProxyCreator组件类, BeanNameAutoProxyCreator 组件能够实现 根据 名字匹配字符串或者通配符匹配 方式 的 Bean 组件 对象实例自动创建 AOP 代理。 对该 Around 通知进行单元测试以测试其功能是否正确地实现 ( 1)在下面的图 中所示的 代码 是以测试数据库表中存在的某个用户名称(本测试时选择为“张三”)进行注册 图 故意以数据库表已经存在的用户 帐号进行注册 ( 2) 以下面的图 中所示的操作状态, 启动并执行项目中的 对 业务组件接口UserInfoManageInterface 的 测试用例 TestUserInfoManageImple。 图 启动并执行项目中的 TestUserInfoManageImple 测试用例 ( 3) TestUserInfoManageImple 测试用例的执行结果 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 8/16 页 当 以测试数据库表中存在的某个用户名称进行注册 时 ,则出现下面的 图 中所示的错误 提示。 图 以数据库表中存在的某个用户名称进行注册时将出现错误 提示 ( 4)而如果改变为在 测试 数据库表中没有的用户名称(本测试时选择为 “ abcd”并请见下面的图 中所示的代码 ) 图 改变为在数据库表中没有的用户帐号进行注册 ( 5) 再次执行 TestUserInfoManageImple 测试用例 其 执行 的 结果 请见下面的图 中所示的结果 ,在下面的图 中发现没有出现错误(本次测试为了简化执行过程,临时屏蔽了测试用例中的其它的测试方法)。 图 改变为在数据库表中没有的用户帐号进行注册时将不出现错误 根据前面的图 和图 中的正反两种状态的测试 结果表明,前面所设计的 Around通知组件类 UserInfoAroundAdvice作为 拦截器已经对 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 9/16 页 的 业务接口 UserInfoManageInterface 内 的 doUserRegister 方法进行了 拦截,并控制了 其执行的过程 和达到了既定的设计目标。 实现 前置 ( Before) 和 后 置 ( After) 通知 开发者经常需要在 应用系统中 实现 “方法跟踪” 的功能,而所谓的 “方法跟踪”是指捕获一个目标应用系统 中 所跟踪的方法的调用以及 这些 方法的返回值,并以某种方式显示出这 些 跟踪 的结果信息。 在 Spring 框架的 AOP 技术实现 中,前置( Before)通知和后置( After)通知类型常用于捕获这些类型的连接点,因为这两种通知可以在方法调用的连接点之前或之后被触发。 通过前置通知显示正在被捕获的目标的方法,而再通过后置通知将被捕获的目标方法的执行结果或者状态显示输出。 Before 通知 的实现及应用示例 接口 ( 1) MethodBeforeAdvice 接口的定义 在 Spring 框架 中 要 实现 和应用 前置 通知,只需要对 Spring 框架 AOP 中的 接口进行实现 , 并重写其中的 before 方法。 下面的 【例 7– 4】中所示 的代码 为 MethodBeforeAdvice 接口的定义。 【例 7– 4】 MethodBeforeAdvice 接口的定义 示例 public interface MethodBeforeAdvice extends BeforeAdvice { void before(Method targetMethod, Object[] methodArgs, Object targetClass) throws Throwable。 } 在接口 MethodBeforeAdvice 中只有一个方法 before 需要实现并请 注意其返回值的类型是 void,它定义了 前置通知 所应该实现的行为,而该 前置通知 是在被调用的目标方法开始执行前被执行的。 ( 2)对接口 MethodBeforeAdvice 中的 before 方法中的各个参数的说明 before 方法共有三个参数,它们提供了相当丰富的与被捕获的目标方法有关的信息。 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 10/16 页  参数 Method targetMethod 也就是所要监视或者捕获的目标方法 开发者利用该参数可以获得被捕获的目标方法的名称,从而可以用作判断是否要执行目标通知 Advice 代码的前题条件或者作为状态信息中的一个重要的名称信息。  Object[] methodArgs 是传给所要监视或者捕获的目标方法的参数数组 当需要进行日志记录功能实现时,参数 m。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。