`
kongshanxuelin
  • 浏览: 925517 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

Web开发通用监控类解决方案(代码零侵入性)

阅读更多

在我们开发网站的过程中,经常会碰到这种情况,当调用某个类中函数的时候,需要记录一些东西或触发某些事件,如何来实现呢?如当缓存中的对象不是最新时,需及时更新缓存对象,当调用某些类的某些方法时,需要记录某些日志信息等,这种应用无处不在,我们如何实现他,利用Spring框架的AOP为例,记录一下他的实现方法

  1. 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>
     
  2. 两个类的源码如下
    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();
    }
     
  3. 测试代码

在我程序的任何地方调用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
目标方法参数列表:
===========================

 这种方式绝对是代码零侵入性,推荐大家使用。

2
1
分享到:
评论
2 楼 kongshanxuelin 2008-10-22  
yuanye218 写道

private GroupService groupService;&nbsp; &nbsp;&nbsp;&nbsp; public GroupService getGroupService() {&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return groupService;&nbsp; &nbsp;&nbsp;&nbsp; }&nbsp; &nbsp;&nbsp;&nbsp; public void setGroupService(GroupService groupService) {&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.groupService = groupService;&nbsp; &nbsp;&nbsp;&nbsp; }&nbsp; 1、这个变量有什么用?2、为什么不使用接口,例如: private IGroupService groupService;&nbsp;&nbsp; 而要使用GroupService具体的对象?

这是spring注入的服务,这里我只是举了一个具体例子
1 楼 yuanye218 2008-10-22  
private GroupService groupService; 
    public GroupService getGroupService() { 
        return groupService; 
    } 
    public void setGroupService(GroupService groupService) { 
        this.groupService = groupService; 
    } 

1、这个变量有什么用?
2、为什么不使用接口,例如: private IGroupService groupService;
   而要使用GroupService具体的对象?

相关推荐

    监控视频遥控器嵌入式软件说明书.doc

    监控视频遥控器嵌入式软件是现代视频监控系统的核心组成部分,尤其在安全保卫、生产和试验过程中发挥着重要作用。...总的来说,监控视频遥控器嵌入式软件为构建高效、安全、灵活的监控网络提供了全面的解决方案。

    JAVA上百实例源码以及开源项目源代码

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...

    Spring面试题 75道1

    1. **基于POJO的轻量级和最小侵入性编程**:Spring鼓励使用简单的Java对象(POJOs)而不是复杂的JavaEE组件,这使得代码更易于理解和维护。 2. **依赖注入(DI)和面向接口编程实现松耦合**:通过依赖注入,对象间...

    安恒信息电子政务网站安全防护解决方案定义.pdf

    【电子政务网站安全防护解决方案】 随着信息技术的飞速发展,电子政务网站已成为政府与公众交流的重要平台,提供了网上办公和办事服务。然而,随着网站功能的复杂化,信息安全问题也日益凸显。政府门户网站的安全...

    J2EE 设计模式精解_EN

    在J2EE应用程序开发中,设计模式是一种经过验证的、重用的解决方案,用于解决常见的问题,以提高代码质量和可维护性。"J2EE设计模式精解"着重讨论了如何利用这些模式来构建健壮的、可扩展的Web应用程序。在给定的...

    Spring_3.x企业应用开发实战 目录

    - **背景**:SpringSource 是 Spring 框架背后的公司,专注于提供基于 Spring 的企业级解决方案和服务。 - **贡献**:不仅维护和发展 Spring 框架本身,还提供了许多工具和产品来支持 Spring 的应用开发。 - **...

    java开源包11

    1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. ...

    常用嵌入式系统软件仿真自动化黑盒测试平台.docx

    - 开放性:提供协议模板管理接口,便于积累和快速构建不同领域应用层协议的测试解决方案。 - 监控灵活性:丰富的测试仪表和协议字段绑定方式,支持双向绑定和表达式绑定。 - 多层次支持:兼顾初级至高级测试人员...

    spring-framework-1.1.4-with-dependencies.zip

    2. **面向切面编程(Aspect-Oriented Programming,AOP)**:Spring的AOP模块提供了声明式事务管理、日志记录、性能监控等跨切面关注点的解决方案。AOP允许将这些通用功能抽取出来,作为独立的模块进行处理,降低了...

    java开源包8

    1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. ...

    java开源包10

    1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. ...

    spring-framework-4.3.24.RELEASE-dist.zip

    6. **Spring Security**:Spring的安全模块提供了一套完整的安全解决方案,包括身份验证、授权、CSRF防护等,为Web应用提供了强大的安全保障。 7. **Test Support**:Spring的测试框架支持单元测试和集成测试,提供...

    21春南开大学《电子商务解决方案案例》在线作业-1参考答案.docx

    - **PHP**:一种通用开源脚本语言,特别适合用于Web开发。 - **JSP**:Java Server Pages,一种基于Java技术的服务器端脚本环境。 ### 11. WWW的工作原理 - **知识点概述**:WWW是一种基于超文本方式查询文件信息...

    嵌入式测试系统软件测试平台.pptx

    嵌入式测试系统软件测试平台是一种专为解决嵌入式软件、Web应用、移动APP以及桌面软件测试难题而设计的自动化测试解决方案。该平台通过业务流程建模,能够自动生成满足路径覆盖要求的测试用例,并创建自动化测试脚本...

    java开源包1

    1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. ...

    java开源包2

    1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. ...

    java开源包3

    1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. ...

    java开源包6

    1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. ...

Global site tag (gtag.js) - Google Analytics