• Ejb in action(六)——拦截器


    Ejb拦截器可以监听程序中的一个或全部方法。与Struts2中拦截器同名,并且他们都可以实现切面式服务。同一时候也与Spring中的AOP技术类似。


    不同的是struts2的拦截器的实现原理是一层一层的拦截器包住一个action,拦截Action请求,在自己的拦截器里面自己定义内容。


    Struts2中的拦截器能够说是个过滤器。把不想要或不想显示的内容过滤掉。拦截器能够抽象出一部分代码用来完好原来的Action,同一时候能够减轻代码冗余,提高重用率。如一些登录验证、权限限制等。


    Spring的两大主要功能就是IoC与AOP。然而Spring 中 AOP 代理由 Spring 的 IoC 容器负责生成、管理,其依赖关系也由 IoC 容器负责管理。

    因此,AOP 代理能够直接使用容器中的其它 Bean 实例作为目标,这样的关系可由 IoC 容器的依赖注入提供。Spring 默认使用 Java 动态代理来创建 AOP 代理, 这样就能够为不论什么接口实例创建代理了。当须要代理的类不是代理接口的时候。 Spring 自己主动会切换为使用 CGLIB 代理,也可强制使用 CGLIB。

    Spring的AOP应用:採用AOP+log4j记录项目日志


    然而在分布式项目中,我们无法使用Spring的AOP做到拦截分布式请求。

    採用Ejb的分布式业务,我们就须要使用Ejb的拦截器了。同非常多面向切面的技术一样。Ejb拦截器相同可以完毕日志、权限、事务、异常捕获等功能。

    在我们gxpt项目中。应用了EJb的拦截器加入缓存:blog.csdn.net/wzwenhuan/article/details/24742039

    为了方便大家更加清晰的掌握Ejb拦截器,我们这个举一个简单的样例:

    前文中,我们介绍了一个购物车的样例,如今我们要统计client调用一次server方法,server的响应时间。

    接口实现增加注解@Interceptors:

    @Remote
    @Stateful
    @Interceptors({MyInterceptor.class})
    public class StatefulSessionBeanImpl implements IStatefulSessionBean {
    }


    拦截器:

    package com.lzq.interceptor;
    import javax.interceptor.AroundInvoke;
    import javax.interceptor.InvocationContext;
    public class MyInterceptor {
    	@AroundInvoke
    	public Object log(InvocationContext ctx) throws Exception {
    		long start = System.currentTimeMillis();
    		try {
    			if (ctx.getMethod().getName().equals("list")) {
    				System.out.println("list()已经被调用");
    			}
    			return ctx.proceed();
    		} catch (Exception e) {
    			throw e;
    		}finally{
    			long time =System.currentTimeMillis()-start;
    			System.out.println("用时:"+time+"ms");
    		}
    	}
    }
    


    client再次调用时,就会显示server端的运行时间。


  • 相关阅读:
    go 排序sort的使用
    MySQL 创建索引
    jenkins 解决构建成功后进程消失的问题
    go redigo的简单操作
    go 实现struct转map
    MySQL写入用户微信名
    MySQL简单优化
    python 定时修改数据库
    go 实现简单的加权分配
    python 遇到的小坑
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7235973.html
Copyright © 2020-2023  润新知