Web开发通用监控类解决方案(代码零侵入性)
在我们开发网站的过程中,经常会碰到这种情况,当调用某个类中函数的时候,需要记录一些东西或触发某些事件,如何来实现呢?如当缓存中的对象不是最新时,需及时更新缓存对象,当调用某些类的某些方法时,需要记录某些日志信息等,这种应用无处不在,我们如何实现他,利用Spring框架的AOP为例,记录一下他的实现方法
- 在applicationContext.xml配置文件中加入类似如下配置信息
<bean id="commonAdvise" class="cn.hj.advise.CommonAdvise"></bean> <bean id="commonProxy" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="target"> <ref bean="groupService" /> </property> <property name="proxyInterfaces"> <value>cn.hj.service.IGroupService</value> </property> <property name="interceptorNames"> <list> <value>commonAdvise</value> </list> </property> </bean>
- 两个类的源码如下
public class CommonAdvise implements AfterReturningAdvice{ private GroupService groupService; public GroupService getGroupService() { return groupService; } public void setGroupService(GroupService groupService) { this.groupService = groupService; } public void afterReturning(Object returnValue, Method method, Object[] target_arg, Object target) throws Throwable { System.out.println("==========================="); System.out.println("目标方法返回值:"+returnValue+",目标方法:"+method+",目标对象:"+target+"目标方法参数列表:\n"); if(target_arg!=null){ for(int i=0;i<target_arg.length;i++){ System.out.println("Object["+i+"]:"+target_arg[i]); } } System.out.println("==========================="); } }
public interface IGroupService { public void addGroup(Group group); public void delGroup(Group group); public void modGroup(Group group); public Group findGroup(String groupid); public List listGroup(); }
- 测试代码
在我程序的任何地方调用IGroupService的listGroup时,都会自动执行commonAdvise中的代码,打印信息如下:
=========================== 目标方法返回值:[cn.hj.model.Group@1bb205a, cn.hj.model.Group@48fbc0, cn.hj.model.Group@18837f1] 目标方法:public abstract java.util.List cn.hj.service.IGroupService.listGroup() 目标对象:cn.hj.service.GroupService@10f0a0 目标方法参数列表: ===========================
这种方式绝对是代码零侵入性,推荐大家使用。
相关推荐
xxuncle 2020-07-04
RainyX 2020-06-12
chenhaotao 2020-11-13
liaochaowu 2020-11-12
sjcheck 2020-11-10
huangliuyu00 2020-10-29
PncLogon 2020-09-24
杏仁技术站 2020-09-18
fubrty 2020-09-08
颤抖吧腿子 2020-09-04
liangjielaoshi 2020-08-19
viewerlin 2020-08-19
hfuturer 2020-08-16
Lzs 2020-08-14
一青年 2020-08-13
SHINESUNNY 2020-08-11
lantingyue 2020-07-30
RainyX 2020-07-26