`
freewxy
  • 浏览: 336875 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

编码实现用JDK中的Proxy实现springAOP功能

阅读更多

http://blog.csdn.net/iamtheevil/article/details/6698377 (iteye的编辑器总是丢失源码,崩溃)

1、  创建一个被拦截对象接口peopleService

(横切性关注点)

 

2、  实现被拦截对象接口

package com.wxy.service.impl;

import com.wxy.service.PeopleService;

public class PeopleServiceBean implements PeopleService {

    private String user = null;

    public PeopleServiceBean() {
    }

    public PeopleServiceBean(String user) {
        this.setUser(user);
    }

    @Override
    public String getPeopleName(Integer peopleId) {
        System.out.println("我是getPeopleName()方法");
        return "wxy";
    }

    @Override
    public void save(String name) {
        System.out.println("我是save()方法,save:" + name);
    }

    @Override
    public void update(String name, Integer peopleId) {
        System.out.println("我是update()方法");
    }

    /**
     * @param user the user to set
     */
    public void setUser(String user) {
        this.user = user;
    }

    /**
     * @return the user
     */
    public String getUser() {
        return user;
    }

}

 

 

3、拦截所有业务方法

判断用户是否有权限,有权限就允许执行业务方法,没有权限则不允许执行业务方法(是否有权限是根据user是否为null为依据的)。

为目标对象创建动态代理类的类proxy(在jdk

中的反射中):

package com.wxy.aop;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import com.wxy.service.impl.PeopleServiceBean;

/**
*   创建代理工厂
*  当客户端调用代理对象的业务方法时,代理对象执行invoke方法,invoke方法把调用委派给targetObject
*  相当于调用目标对象的方法,在invoke方法委派前判断权限,实现方法的拦截
*   @creator            xiaoyu.wang   
*   @create-time     2011-8-18   上午08:57:30   
*   @revision          $Id
*/
public class JDKProxyFactory implements InvocationHandler {
    private Object targetObject;

    public Object createProxyInstance(Object targetObject) {
        this.targetObject = targetObject;
        return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(),
            this.targetObject.getClass().getInterfaces(), this);
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        PeopleServiceBean bean = (PeopleServiceBean) this.targetObject;//被代理对象
        Object result = null;
        if (bean.getUser() != null) {//有权限,user不为null
            result = method.invoke(targetObject, args);
        }
        return result;
    }

    /**
     * @param targetObject the targetObject to set
     */
    public void setTargetObject(Object targetObject) {
        this.targetObject = targetObject;
    }

    /**
     * @return the targetObject
     */
    public Object getTargetObject() {
        return targetObject;
    }

}

 4、测试:

public class AOPTest {
    public static void main(String[] args) {
        JDKProxyFactory factory = new JDKProxyFactory();
        PeopleService service = (PeopleService) factory.createProxyInstance(new PeopleServiceBean(
            "wxy"));

        service.save("wxy");
    }

}

 5、测试结果:

我是save()方法,save:wxy

 

 

分享到:
评论

相关推荐

    使用JDK中的Proxy技术实现AOP功能与使用CGLIB实现AOP功能

    使用JDK中的Proxy技术实现AOP功能与使用CGLIB实现AOP功能

    JDK动态代理 spring aop 的原理

    Jdk动态代理,基于接口的代理示例 InovactionHandler Proxy

    类似spring Aop的Proxy封装

    有一天在用回调模版的时候,忽然间又想到jdk自带的Proxy类似乎不是怎么好用,为何不把其做成回调模版呢,可以将其改造称类似spring Aop 代码如下: package com.fjx.proxy.up.test; import ...

    spring之AOP(动态代理)

    spring之AOP(动态代理),包括jdk动态代理和CGLib动态代理

    Spring框架+SpringAOP动态代理

    SpringAOP动态代理 Spring AOP 使用的动态代理主要有两种方式:JDK 动态代理和 CGLIB 代理。 JDK 动态代理:用于代理实现了接口的类。Spring 会使用 java.lang.reflect.Proxy 类来创建代理对象。 CGLIB 代理:用于...

    spring_aop4.rar_Home Home_jar 转换_spring AOP jar

    1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP 2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP 3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间...

    JDK-proxy-mode-spring-source-code-.zip_spring code

    Spring框架的JDK代理模式底层代码。有助理解Spring的Aop模式的代理

    spring2.5学习PPT 传智博客

    使用JDK中的Proxy技术实现AOP功能 16.使用CGLIB实现AOP功能与AOP概念解释 17.使用Spring的注解方式实现AOP入门 18.使用Spring的注解方式实现AOP的细节 19.使用Spring配置文件实现AOP 20.aspectj的切入点语法...

    cglib aop spring 动态代理

    静态代理--不适合企业开发,适合初学者理解代理。 jdk动态代理--适合企业级开发,但是它要求必须面向接口编程,假如目标类没有实现接口...spring 的AOP功能中 会根据目标类是否实现了接口来判断使用 jdk Proxy还是cglib

    Spring_0300_JDKProxy

    简单的动态代理实现代码!文档参考博文Spring学习(3)AOP初步—JDK动态代理

    使用动态代理演示Spring的AOP编程原理

    为了说明Spring的AOP原理,本人使用代理模式中的动态代理完成演示AOP编程的原理的演示。相信,如果你耐心看完整个程序(几乎一行注释一行代码),那么你对Spring这个东西就不是觉得有什么神秘了! 阅读对象:凡是喜爱...

    AOP编程示例

    CGlib的Proxy实现AOP的示例、JDK的Proxy实现AOP的示例、通过spring注解方式实现AOP

    JAVA的反射机制与动态代理.pdf

    本文档先讲解了JDK的反射机制,然后是Proxy的动态代理、CGLIB的动态代理,因为这些是Spring AOP的底层技术,清楚了它们,你就更能够理解Spring AOP是如何工作的。在文档的最后简要写了Spring AOP的使用,因为这不是...

    基于java的企业级应用开发:JDK动态代理.ppt

    对于使用业务接口的类,Spring默认会使用JDK动态代理来实现AOP。 Hibernate 的 二级缓存 学习案例 案例代码 接下来,就通过一个案例来演示Spring中JDK动态代理的实现过程,具体代码请参见教材3.2.1小节。 CGLIB代理 ...

    spring练习项目.7z

    proxy,jdkproxy-transaction,jdkproxy-salary,day02-itheima11-spring-08-cglibproxy,day02-itheima11-spring-09-aop.xml,day02-itheima11-spring-10-aop.xml.advice,day02-itheima11-spring-11-aop.xml.exception等...

    springIOC核心组件分析.vsdx

    pring源代码各个模块作用 核心模块: 1 spring-core:核心模块 依赖注入IOC和DI的最基本实现 ...spring-aop:面向切面编程,CGLB,JDKProxy spring-aspects:集成AspectJ,Aop应用框架 spring-instrume

    《剑指offer》Java代理.pdf

    Java 代理 代理模式 静态代理与动态代理 常见的动态代理实现 JDK Proxy CGLIB JDK Proxy 和 CGLIB 的对比 动态代理的实际应用 Spring AOP

    java 实现AOP

     为了简单起见,例子没有没有使用任何第三方的AOP Framework, 而是利用Java语言本身自带的动态代理功能来实现AOP.  让我们先回到AOP本身,AOP主要应用于日志记录,性能统计,安全控制,事务处理等方面。它的主要...

    spring动态代理原理

    通过代码了解springaop原理,代码采用jdk的动态代理相关类Proxy、InvocationHandler解释动态代理模式

Global site tag (gtag.js) - Google Analytics