aspect的用法和搭配(aspect的用法及短语)

2018年01月08日12时06分44秒阅读次数:106//@方面使用的jar包:& lt;依赖性& gt& ltgroupId & gtorg.aspectj

2018年01月08日12时06分44秒

阅读次数:106

//@方面使用的jar包:& lt;依赖性& gt& ltgroupId & gtorg.aspectj & lt/groupId & gt;& ltartifactId & gtaspectjweaver & lt/artifact id & gt;& lt版本& gt1 . 7 . 2 & lt;/version & gt;& lt/dependency & gt;//我没有用XML配置文件,所以用了这个annotation @ enableSAspectJautoproxy,意思是启用自动代理功能。注释主要添加到配置类中,如下图所示。如果使用XML配置文件,只需要在XML中配置切点和切平面(这里不解释)。

aspect的用法(aspect有复数吗)插图

/* * *用户定义的注释截获controller */@ target({ element type . parameter,element type . method })@ retention policy . runtime)@ Documented Public @ InterfaceSystemControllerLog { string description()default " ";}导入com . Google . gson . gson;导入org . Apache . commons . lang 3 . string utils;导入org . AspectJ . lang . join point;导入org . AspectJ . lang . proceedingjoinpoint;导入org . AspectJ . lang . annotation . *;导入org . AspectJ . lang . reflect . method signature;导入org . slf4j . logger;导入org . SLF 4j . logger factory;导入org . spring framework . stereotype . component;导入org . spring framework . web . context . request . request attributes;import org . spring framework . web . context . request . requestcontextholder;import org . spring framework . web . context . request . servletrequestattributes;导入javax . servlet . http . http servlet request;导入Java . io . file;导入Java . io . file output stream;导入Java . io . io exception;导入Java . lang . reflect . method;导入Java . text . simple date format;导入Java . util . date;导入Java . util . hashmap;导入Java . util . map;/* * * * @ class name:loga SPECT * @ description:logging AOP实现* @ author shaijan . Yu * @ date 2014年11月3日下午1:51:59 * */@ Aspect @ component public class loga SPECT { private final Logger Logger = Logger factory . get Logger(this . getclass());私有字符串requestPath = null//请求地址私有字符串userNo = null//用户名PrivateMap <?,?& gtinputParamMap = null//传入参数privatemap < String,Object & gtoutputParamMap = null//存储输出结果private long startTimeMillis = 0;//开始时间private long endTimeMillis = 0;//结束时间私有字符串remoteAddr//请求IP私有字符串描述;//方法描述/** *控制器层切点标注拦截*/@ pointcut(" @ annotation(com . zhuhui class . cloud . web . annotation . systemcontrollerlog)")public void控制器方面(){ }/* * * * @ title:dobeforeservicelayer * @描述:方法调用前触发*记录开始时间* @ authorshaojian.yu * @日期2014年11月2日下午4:45:53 * @ param join point */@ Before(" execution(* com . zhuohui class . cloud . web . controllers..*.*(..))")public void doBeforeInServiceLayer(join point join point){ startTimeMillis = system . currenttimemillis();//记录方法开始执行的时间}/* * * @ title:doaferrinservicelayer * @ description:方法被调用后触发* Record end time * @ author shaijan . Yu * @ date 2014年11月2日下午4:46:21 * @ param join point */@ After(" controller aspect()")public void doAfterInServiceLayer(join point join point)抛出io exception { endTimeMillis = system . currenttimemillis();//记录方法执行完成的时间。description = getcontrollermethoddescription 2(连接点);if(string utils . is blank(description)){ description = "-";} this . printoplog();}/* * * * @ title:do Around * @ description:surround trigger * @ author shai Jian . Yu * @ date 2014年11月3日下午1:58:45 * @ param pjp * @ return * @ throwsthrowable */@ Around(" execution(* com . zhuohui class . cloud . web . controllers..*.*(..))")公共对象DOA round(ProceedingJoinPoint pjp)抛出Throwable { /** * 1。获取请求信息* 2。根据请求获取会话* 3。从session */request attributes ra = request context holder . getrequest attributes()中获取登录用户信息;ServletRequestAttributes SRA =(ServletRequestAttributes)ra;http servlet request request = SRA . get request();userNo =(String)request . getsession()。get attribute(" user ");if(string utils . is blank(userNo)){ userNo = "-";} remote addr = request . getremote addr();//请求的IP if(string utils . is blank(remote addr)){ remote addr = "-";}//获取输入参数input paramap = request . getparametermap();//获取请求地址request path = request . getrequest uri();if(string utils . is blank(request path)){ request path = "-";}//方法执行后返回值:调用proceed()方法会触发切入点方法执行output param map = new hashmap < String,Object & gt();object result = pjp . proceed();//result的值是被拦截的方法outputparammap.put ("result ",结果)的返回值;返回结果;}/* * *获取控制器层批注的批注中方法的描述信息* * @ param join point tangent * @ return description */public static String getcontrollermethoddescription 2(join point join point){ method signature signature signature =(method signature)join point . Get signature();method method = signature . get method();SystemControllerLog controller log =方法。get annotation(systemcontrollerlog . class);string description = controller log . description();返回描述;}/* * * * @ title:printoptlog * @ description:output log * @ author shaijan . Yu * @ date 2014年11月2日下午4:47:09 */privatevoid printoptlog(){ gsongson = newgson();//google的gson解析包字符串opt time =新的简单日期格式(" yyyy-mm-ddhh: mm: ss ")。需要格式(开始时间毫秒);String data1 = "用户ID:" +userNo+"rn"+"请求地址:"+requestPath+"rn"+"请求IP:"+remoteAddr+"rn"+"方法+描述+" r +"rn"+"参数:"+gson . tojson(input parammap)+" r n "+"返回参数:"+gson . tojson(output parammap)+" r n ";logger . error(data1);请尝试{ Date now = new Date();SimpleDateFormat SDF = new SimpleDateFormat(" yyyyMMdd ");String logName = sdf.format(现在);//服务器日志地址/数据/网站/zhuohui class/cloud/logs/file log file = new file(" C: users Lenovo desktop ",logname+"。txt ");如果(!log file . exists()){//log file . mkdirs();log file . create new file();} if(字符串utils。isnoneblankk()){ }//数据分析的用户ID IP方法时间string data = userno+" t "+remote addr+" t "+description+" t "+opt time+" t "+" r n ";file output stream out = new file output stream(log file,true);out . write(data . getbytes());out . close();}catch (Exception e){} }//自定义注释用法

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/314132.html

发表回复

登录后才能评论