`
mefly
  • 浏览: 149746 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

几段代码让你明白AOP和struts2中拦截器的原理

阅读更多
代码是李刚老师书上的源码,有助于我们理解动态代理的原理。

Dog.java
package lee;

/*
 * @author  yeeku.H.lee kongyeeku@163.com
 * @version  1.0
 * <br>Copyright (C), 2005-2008, yeeku.H.Lee
 * <br>This program is protected by copyright laws.
 * <br>Program Name:
 * <br>Date: 
 */
public interface Dog
{
    public void info();

    public void run();
}

DogImpl.java
package lee;


/*
 * @author  yeeku.H.lee kongyeeku@163.com
 * @version  1.0
 * <br>Copyright (C), 2005-2008, yeeku.H.Lee
 * <br>This program is protected by copyright laws.
 * <br>Program Name:
 * <br>Date: 
 */
public class DogImpl implements Dog
{
    public void info()
    {
        System.out.println("我是一只猎狗");
    }
    public void run()
    {
        System.out.println("我奔跑迅速");
    }
}

package lee;

/**
 * @author  yeeku.H.lee kongyeeku@163.com
 * @version  1.0
 * <br>Copyright (C), 2005-2008, yeeku.H.Lee
 * <br>This program is protected by copyright laws.
 * <br>Program Name:
 * <br>Date: 
 */
public class DogIntercepter
{
	public void method1()
	{
		System.out.println("=====模拟通用方法一=====");
	}

	public void method2()
	{
		System.out.println("=====模拟通用方法二=====");
	}
}

package lee;

import java.lang.reflect.*;
/*
 * @author  yeeku.H.lee kongyeeku@163.com
 * @version  1.0
 * <br>Copyright (C), 2005-2008, yeeku.H.Lee
 * <br>This program is protected by copyright laws.
 * <br>Program Name:
 * <br>Date: 
 */
public class MyProxyFactory
{
    /**
     * 实例Service对象。
     * @param serviceName String
     * @return Object
     */
    public static Object getProxy(Object object)
    {
       //Dog控制类 代理的操作类
        ProxyHandler handler = new ProxyHandler();
       //把该dog实例托付给代理操作
        handler.setTarget(object);
        //第一个参数是用来创建 动态代理 的ClassLoader对象,只要该对象能访问Dog接口即可。
        //也就只要DogImpl与Dog在同一
        return Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces(),handler);
    }
} 

package lee;

import java.lang.reflect.*;
import java.util.*;
/*
 * @author  yeeku.H.lee kongyeeku@163.com
 * @version  1.0
 * <br>Copyright (C), 2005-2008, yeeku.H.Lee
 * <br>This program is protected by copyright laws.
 * <br>Program Name:
 * <br>Date: 
 */

public class ProxyHandler implements InvocationHandler
{
    private Object target;
	DogIntercepter di = new DogIntercepter();
    public Object invoke(Object proxy, Method method, Object[] args)throws Exception
    {
        Object result = null;
        if (method.getName().equals("info"))
        {
            di.method1();
            result =method.invoke(target, args);
            di.method2();
        }
        else
        {
            result =method.invoke(target, args);
        }
        return result;
    }
    public void setTarget(Object o)
    {
        this.target = o;
    }
}

package lee;

/*
 * @author  yeeku.H.lee kongyeeku@163.com
 * @version  1.0
 * <br>Copyright (C), 2005-2008, yeeku.H.Lee
 * <br>This program is protected by copyright laws.
 * <br>Program Name:
 * <br>Date: 
 */
public class TestDog
{
    public static void main(String[] args) 
    {
        Dog targetObject = new DogImpl();
		Dog dog = null;
        Object proxy = MyProxyFactory.getProxy(targetObject);
        if (proxy instanceof Dog)
        {
            dog = (Dog)proxy;
        }
        dog.info();
        dog.run();
    }
}
分享到:
评论

相关推荐

    struts2 拦截器(AOP,面向切面编程)

    在Struts2中,拦截器就是实现AOP的一种方式。 **Struts2 拦截器**是在Action执行前后插入的代码片段,它们按照定义的顺序组成一个拦截器链。每个拦截器都有机会处理请求,决定是否允许Action执行,以及如何处理...

    浅谈Struts2拦截器的原理与实现.docx

    拦截器栈是Struts2中拦截器的组织方式,它将多个拦截器按照预设的顺序组合成一个链式结构。在Action的执行过程中,这些拦截器会被依次调用,每个拦截器都有机会在Action方法执行前后进行干预。拦截器栈的顺序至关...

    Struts2拦截器源码

    首先,理解拦截器的定义:拦截器是AOP(面向切面编程)的一个概念,在Struts2中,拦截器是基于Java的动态代理机制实现的。它们是一系列实现了`Interceptor`接口的类,可以在Action执行前后插入额外的行为。这些行为...

    struts2 拦截器

    拦截器在Struts2中扮演着至关重要的角色,它们是AOP(面向切面编程)的一个实现,用于在Action执行前后插入额外的功能。下面将详细探讨Struts2拦截器及其工作原理。 ### 一、Struts2 拦截器概念 1. **拦截器是什么...

    Struts2拦截器及其用法详细说明

    在Struts2中,拦截器(Interceptors)扮演着核心角色,增强了框架的功能和灵活性。这篇文章将深入探讨Struts2拦截器的概念、工作原理以及如何在实际应用中使用它们。 **一、什么是Struts2拦截器** 拦截器是基于AOP...

    详解Struts2拦截器

    本文将深入探讨Struts2拦截器的基本概念、工作原理以及其实现机制,并结合实际应用场景来展示如何利用拦截器提高代码的复用性与可维护性。 #### 二、拦截器的概念与作用 拦截器(Interceptor)是一种设计模式,...

    Struts2学习案例(拦截器)

    在Struts2中,拦截器是基于Java的动态AOP(面向切面编程)实现的,它可以在Action调用前后插入额外的逻辑,比如日志记录、权限验证、事务管理等。拦截器通过配置文件或者注解与Action关联,形成一个拦截器栈,每个...

    Struts2之拦截器原理分析及使用-上案例struts007

    拦截器是AOP(面向切面编程)思想在Struts2中的具体实现,它允许开发者在动作执行前后插入自定义的处理逻辑,提升了代码的可复用性和模块化。本篇文章将深入剖析Struts2拦截器的工作原理,并通过案例"struts007"来...

    struts2拦截器

    标题“struts2拦截器”指的是Struts2框架中的拦截器机制,这是一个关键的组件,可以让我们在不修改实际业务代码的情况下,实现对请求处理流程的扩展和定制。 描述中提到的“基于struts2的拦截器测试,实现了页面的...

    Struts2 拦截器

    在Struts2中,拦截器就像过滤器一样工作,通过链式调用在动作执行前后进行预处理和后处理。 首先,我们来理解一下拦截器的基本概念。拦截器是在Action调用之前和之后执行的一段代码,可以用来做日志记录、权限检查...

    Struts2拦截器实现权限控制demo

    在Struts2中,拦截器是实现业务逻辑控制和增强功能的重要机制,它们扮演着类似于AOP(面向切面编程)的角色,允许在动作执行前后插入自定义逻辑。在这个“Struts2拦截器实现权限控制demo”中,我们将深入探讨如何...

    使用struts2拦截器对登陆权限验证

    首先,让我们理解Struts2拦截器的工作原理。拦截器是基于AOP(面向切面编程)的概念设计的,它们形成一个链,每个拦截器按照定义的顺序依次执行。当请求到达Action时,Struts2会调用这个链上的所有拦截器,然后才...

    创建自己struts2拦截器

    在Struts2中,拦截器是AOP(面向切面编程)的一种实现,它可以监控、修改或增强方法调用的行为。下面我们将详细介绍如何创建自定义的Struts2拦截器。 1. **理解Struts2拦截器工作原理** Struts2中的拦截器是一个...

    Struts2的拦截器的小例子程序

    其中,拦截器(Interceptor)是Struts2框架的一个关键组件,它遵循AOP(面向切面编程)的设计理念,能够在不修改原有业务逻辑的情况下,对请求进行预处理或后处理,从而提高代码的复用性和维护性。 #### 二、Struts...

    Struts2的拦截器的使用详解

    1. 拦截器栈:Struts2中的拦截器不是单独工作的,而是以栈的形式存在,称为拦截器栈。每个拦截器都有一个进入方法(invoke)和一个退出方法,当请求到达时,会按照栈的顺序逐个调用进入方法,直到到达目标Action;...

    一个Struts2的核心拦截器例子

    - 在Struts2中,拦截器的配置主要在`struts.xml`或者`struts.properties`文件中进行。通过`&lt;interceptors&gt;`标签定义拦截器栈,然后使用`&lt;interceptor&gt;`子标签创建拦截器实例。 - 使用`&lt;interceptor-ref&gt;`标签引用...

    struts2拦截器国际化

    在Struts2中,拦截器(Interceptor)是实现业务逻辑控制和增强功能的重要机制,而国际化(Internationalization,简称i18n)则能帮助我们构建支持多语言的Web应用。下面将详细解释这两个知识点以及它们如何在Struts2...

    struts2拦截器实现权限控制

    在Struts2中,拦截器是基于AOP(面向切面编程)的概念设计的,它们在Action调用前后执行,可以添加额外的功能,如日志记录、事务管理、权限验证等。对于权限控制,拦截器可以在请求到达Action之前检查用户的登录状态...

    struts2 Interceptor拦截器

    ### Struts2 Interceptor 拦截器详解 #### 一、概述 在现代Web开发中,特别是基于Java的Web应用程序开发中,Struts2框架因其简洁性和强大的扩展能力而备受青睐。Struts2框架的核心设计理念之一是MVC(Model-View-...

Global site tag (gtag.js) - Google Analytics