时间:2015-08-26 来源:

Java知识总结----Spring拦截器(六) 【编程语言】

        在看到拦截器的时候psd切图html,大家一定会想到另外一个词,psd切图html就是过滤器.两者到底有什么区别呢?过滤器,团队网页接活从字面的意思理解就是过滤用的,div切图排版当很多请求过来的时候div页面,我们对其进行过滤,手机页面切图排版满足一定条件的时候div+css+js切图,才放行.在Java中,div+css+js切图过滤器是使用Filter实现的承接网站前端,实现原理都是基于回调函数的.最常见的过滤器的应用就是字符编码的过滤、用户信息验证的过滤等.拦截器呢,页面div重构就是用来拦截的psd切图html,可以在方法的执行时,psd切图html添加一些其他的信息web外包,拦截器是使用Interceptor实现的,web外包实现原理是基于Java的反射机制的.最常见的拦截器的应用有:添加访问日志、性能监控等.今天我们就来看看怎么用Spring的拦截器为方法添加访问日志.

最后网页切图制作,我们在spring的配置文件中,div页面来配置拦截器.

/** * 1.RetentionPolicy.SOURCE ——只在源代码级别保留div+css+js切图,编译时就会被忽略 2.RetentionPolicy.CLASS ——编译时被保留,div+css+js切图在class文件中存在承接网站前端,但JVM将会忽略 3.RetentionPolicy.RUNTIME —— 被JVM保留,承接网站前端所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用. * */ @Retention(RetentionPolicy.RUNTIME) /** * 该注解应用于方法 */ @Target(ElementType.METHOD) /** * 指明被注解的类会自动继承psd切图html,如果我们把注解放在接口的方法上,承接网页制作那么实现该接口的类也会被继承该注解 */ @Inherited /** * Documented 注解表明这个注解应该被 javadoc工具记录. */ @Documented public @interface MonitorLog { } 然后我们在需要拦截的方法上天剑@MonitorLog注解.

public class MonitorLogInterceptor implements MethodInterceptor { private Logger logger = LoggerFactory.getLogger(MonitorLogInterceptor.class); public Object invoke(MethodInvocation methodinvocation) throws Throwable { Method method = methodinvocation.getMethod(); //获取方法的MonitorLog注解 MonitorLog log = method.getAnnotation(MonitorLog.class); boolean bLog = false; //该方法存在MonitorLog注解web外包,则输出日志 if(log != null) { bLog = true; //方法执行前输出 logger.info("methodIn:methodName="+method.getName()); } try { //执行方法 return methodinvocation.proceed(); } finally { if(bLog) { //方法执行后输出 logger.info("methodOut:methodName="+method.getName()); } } } } 以上,web外包就是spring拦截器的一个简单的应用.当然了网页切图制作,我们也可以使用spring的aop标签,手机页面切图排版来进行具体的配置.

public interface UserService { @MonitorLog public boolean insertUser(UserModel user); public UserModel getUser(int userId); public String test(); public void user(String name); } 我们现在还需要修改MonitorLogInterceptor类div+css+js切图,只有添加@MonitorLog的方法才进行拦截,网页重构报价其他的不拦截.

此处的执行过程是这样的:当调用相应的方法时承接网站前端,调用InterceptorChain.invoke()----->InterceptorChainSupport.proceed()---->***Interceptor.invoke()------>InterceptorChainSupport().proceed()------......---->真正的方法处理---->方法之后的拦截处理.

接着,承接网站前端有的时候psd切图html,我们可能需要自定义多个拦截器,psd切图html这个时候web外包,我们需要有一个拦截器链,div切图排版把这些拦截器都串起来.

这个时候呢网页切图制作,就有了一个问题,手机页面切图排版如果我不想给这个类的每个方法都进行拦截div+css+js切图,只拦截一部分呢?这个时候我们可以借助注解来实现.为需要拦截的方法上加上注解.

版权声明:本文为博主原创文章,div+css+js切图未经博主允许不得转载.

import java.lang.reflect.AccessibleObject; import java.lang.reflect.Method; import java.util.List; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; public class InterceptorChainSupport implements MethodInvocation { private MethodInvocation proxy; private List<MethodInterceptor> chains; public InterceptorChainSupport(MethodInvocation proxy,List<MethodInterceptor> chains) { this.proxy = proxy; this.chains = chains; } public MethodInvocation getProxy() { return proxy; } public void setProxy(MethodInvocation proxy) { this.proxy = proxy; } public List<MethodInterceptor> getChains() { return chains; } public void setChains(List<MethodInterceptor> chains) { this.chains = chains; } public Object[] getArguments() { return proxy.getArguments(); } public AccessibleObject getStaticPart() { return proxy.getStaticPart(); } public Object getThis() { return proxy.getThis(); } public Object proceed() throws Throwable { //如果拦截器链不空,页面div重构则继续执行拦截器 if(chains != null && chains.size() > 0) { //递归调用psd切图html,一直调用到拦截器链的最后一个 return (chains.remove(0)).invoke(this); } else { return proxy.proceed(); } } public Method getMethod() { return proxy.getMethod(); } } InterceptorChainSupport是真正来处理拦截器链的,psd切图html遍历执行所有的拦截器.在InterceptorChain中构造InterceptorChainSupport的时候要特别注意web外包,否则网页切图制作,会造成调用链只能执行一次的情况.

首先我们创建一个注解类,div页面MonitorLog.

import java.util.ArrayList; import java.util.List; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; /** * 拦截器链 * @author lizhiyang * */ public class InterceptorChain implements MethodInterceptor { private List<MethodInterceptor> chains; public Object invoke(MethodInvocation methodinvocation) throws Throwable { InterceptorChainSupport support = new InterceptorChainSupport(methodinvocation,他的实现如下:

       首先承接网站前端,我们创建一个拦截器类,承接网站前端由于我们需要拦截的是方法psd切图html,所以,承接网页制作就继承MethodInterceptor类.

import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 监控日志拦截器 * @author lizhiyang * */ public class MonitorLogInterceptor implements MethodInterceptor { private Logger logger = LoggerFactory.getLogger(MonitorLogInterceptor.class); public Object invoke(MethodInvocation methodinvocation) throws Throwable { Method method = methodinvocation.getMethod(); //方法执行前输出 logger.info("methodIn:methodName="+method.getName()); try { //执行方法 return methodinvocation.proceed(); } finally { //方法执行后输出 logger.info("methodOut:methodName="+method.getName()); } } } 在方法的执行前和执行后都加上日志输出.

<!-- 配置日志监控拦截器 --> <bean id="monitorLogInterceptor" class="com.demo.interceptor.MonitorLogInterceptor" /> <!-- 配置拦截器链web外包,保存所有的拦截器 --> <bean id="interceptorChain" class="com.demo.interceptor.InterceptorChain"> <property name="chains"> <list> <ref bean="monitorLogInterceptor"/> </list> </property> </bean> <!-- 配置拦截器和需要拦截的bean --> <bean id="serviceProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="interceptorNames"> <list> <value>interceptorChain</value> </list> </property> <property name="beanNames"> <value>*Service</value> </property> </bean> 这样配置之后,web外包在spring容器加载的时候网页切图制作,spring就知道了执行*Service类中的方法时候,手机页面切图排版需要应用interceptorChain中的拦截器.

点击次数:6330
作者:
web前端行业资讯
Web new NewsList
英特尔宣布与法拉利跨界合作欲将AI技术用于赛车运动 ,,2018年01月11日甲骨文服务器出漏洞:攻击者用漏洞挖矿获取加密货币 ,,2018年01月11日用深度学习设计图像视频压缩算法:更简洁、更强大 ,,2018年01月11日Ubuntu内核和NVIDIA更新:修复Meltdown和Spectre两处漏洞 ,,2018年01月11日AntDesign3.1.1发布,阿里企业级UI设计语言 ,,2018年01月11日微信「跳一跳」带火小游戏,开发者如何快速上手? ,,2018年01月11日谷歌公布最新安卓系统份额:你用上奥利奥了么? ,,2018年01月11日腾讯开发出“3D音效”算法:普通耳机实现3D实时语音效果 ,,2018年01月11日谷歌工程师点赞中国程序员实现Node.js启动超4倍提速 ,,2018年01月11日三星电子总裁兼CE部门负责人金炫奭:万物互联时代到来 ,,2018年01月11日NVIDIA和大众合作建立智能驾驶助手 ,,2018年01月11日GIMPS项目报告发现已知最大素数 ,,2018年01月11日微软与生物技术公司开展AI驱动的血液检测同时诊断数十种疾病 ,,2018年01月11日微软跨平台移动开发工具套件HockeyApp宣布免费 ,,2018年01月11日《硅谷》里神乎其神的压缩技术,AI正在一点点做出来 ,,2018年01月11日LinuxMint19代号敲定为“Tara”预计2018年5月至6月期间发布 ,,2018年01月11日Facebook发布wav2letter工具包,用于端到端自动语音识别 ,,2018年01月11日开源数据库ArangoDB正进行约1156万美元股权融资 ,,2018年01月11日IntelCPU漏洞闹大:腾讯云紧急升级 ,,2018年01月11日2018年1月全球数据库排名:Redis夺回第八 ,,2018年01月11日Lyft将联手无人驾驶公司于CES上展示无人驾驶汽车 ,,2018年01月11日京东X无人超市首家社会门店开业:刷脸进、微信自动结算 ,,2018年01月11日担心被AI取代是杞人忧天?高晓松跨年演讲说的有几分对 ,,2018年01月11日免费授权技术许可Intel宣布在未来CPU中集成雷电3 ,,2018年01月11日算法决定你在社交媒体上看到的信息 ,,2018年01月11日谷歌安全博客披露“英特尔内核漏洞”更多细节 ,,2018年01月04日Postgres10开发者新特性 ,,2017年12月28日阿里巴巴、狗尾草、苏大联合论文:基于对抗学习的众包标注用于中文命名实体识别 ,,2017年12月28日柯洁的2017:20岁,与AI斗与人类斗,其乐无穷 ,,2017年12月28日如果机器人拥有痛觉,这个世界会有哪些不一样? ,,2017年12月28日JavaWEB--相对路径和绝对路径 【编程语言】2015年03月24日windbgkpkb命令测试 【Web前端】2015年01月12日【SparkCore】TaskScheduler源码与任务提交原理浅析1 【移动开发】2015年07月21日javascript学习笔记(十三)js闭包介绍(转)2014年01月29日第13周读代码答题-2 【综合】2015年06月02日点击快捷方式,不重新启动程序而是让程序窗口重新显示的解决方案 【编程语言】2015年06月26日hdu5410 【移动开发】2015年08月24日JavaScript中的eval()函数详解2014年01月29日js获取input标签的输入值实现代码2014年01月29日HDU5102(树的前k路径+队列) 【移动开发】2014年11月11日如何在服务器上建立站点2014年01月28日LeetCode--UniquePaths 【编程语言】2015年01月13日【C++】LeetCode:87LetterCombinationsofaPhoneNumber 【编程语言】2015年01月12日CharmBracelet(poj3624)(01背包)【编程语言】2014年11月11日记表备查-----动态规划算法 【编程语言】2015年05月11日黑马程序员-----安卓常用uri 【编程语言】2015年02月09日Androidlint删除无用图片文件和配置文件 【编程语言】2015年07月02日Qt中界面间的执行调用QDialog::Accepted 【综合】2014年12月01日HDU4407Sum(容斥原理+质因数分解) 【编程语言】2015年08月24日TCP--SYN洪水攻击 【Web前端】2015年04月01日jquerytab插件精简版分享2014年01月29日Linux下Redis启动关闭重启服务脚本【编程语言】2014年12月25日设备接到APNS发来的通知处理方式【移动开发】2015年04月24日UISearchDisplayCotroller 【互联网】2015年06月30日133A-HQ9+【编程语言】2014年12月01日去哪网实习总结:JAVA读XML文件节点信息(JavaWeb) 【架构设计】2015年08月24日hdu4324TriangleLOVE【编程语言】2015年04月17日笔记本电脑提速之加装内存条、SSD固态硬盘、光驱位换SSD固态硬盘 【综合】2015年08月24日梅耶尔致信雅虎全员:欢迎来我办公室畅谈未来 ,,2016年06月23日华为机试—Smith数 【编程语言】2015年01月12日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)