`
lichaobao
  • 浏览: 47298 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用JDK的proxy实现Aop的功能

    博客分类:
  • java
阅读更多
1、模拟Aop拦截所有类方法
2、判断用户是否有权限,有权限就允许操作该类方法,没有权限不允许操作该类方法
(只是一个模拟,根据用户名是否为null判断是否有权限)

横切性关注点(proxy)  使用JDK的proxy的业务类必须实现接口

下载给一个demo,已经测试通过
步骤:
1、先写好业务类型和业务类实现的接口
这里接口的代码
package cn.tuletech.service;

public interface StudentService {

public String getUsername();

public void delete();

public void getUser();

}
实现接口的代码
package cn.tuletech.service.impl;
import cn.tuletech.service.StudentService;

public class StudentServiceBean implements StudentService {
private String username = null ;
public StudentServiceBean(){}

public String getUsername() {
return username;
}

public StudentServiceBean(String username){
this.username = username;
}

public void delete(){
System.out.println("删除成功");
}

public void getUser(){
System.out.println(this.username);
System.out.println("获取用户名");
}
}
2、编写Proxy工厂
package cn.tuletech.util;

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

import cn.tuletech.service.StudentService;

public class ProxyFactory implements InvocationHandler{
public Object targetObject;
/**
* Object  接口对象
* @param targetObject 目标对象
* @return
*/
public Object createProxyObject(Object targetObject){
this.targetObject = targetObject;
/**
* this.targetObject.getClass().getClassLoader() 目标装载类
* this.targetObject.getClass().getInterfaces()   目标对象实现的接口
* this 表示回调   这个类
*/
return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(), this.targetObject.getClass().getInterfaces(),this);

}
/**
* this.targetObject对象调用自己的方法时,执行invoke函数,满足条件返回this.targetObject对象,继续执行所调用的方法
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
StudentService service = (StudentService) targetObject;
Object result = null;
if(service.getUsername()!=null){
result = method.invoke(this.targetObject, args);//把对象和方法
}
return result;
}
}
0
1
分享到:
评论

相关推荐

    Aop jdk proxy实现小例子

    下面我们将详细讲解如何使用JDK Proxy实现Aop。 首先,我们需要定义一个接口,这个接口将代表我们要进行代理的目标对象的行为。例如,我们可以创建一个名为`Service`的接口: ```java public interface Service { ...

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

    在Java中,我们可以使用JDK的动态代理(Proxy)来实现AOP的功能,这主要涉及到反射和接口编程。 **JDK动态代理的工作原理** JDK的Proxy类提供了一种机制,可以创建一个代理对象,该对象在调用方法时会执行自定义的...

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

    本篇将深入探讨如何使用JDK的动态代理和CGLIB库来实现Spring中的AOP功能。 首先,我们来看JDK中的Proxy技术。JDK Proxy是Java提供的一种动态代理机制,它允许我们在运行时创建一个实现了特定接口的新类。这个新类...

    Java JDK 实现AOP

    ### Java JDK 实现AOP详解 #### AOP的起源与发展 面向方面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,由施乐公司帕洛阿尔托研究中心(Xerox PARC)在20世纪90年代发明。AOP的初衷是为了更好地...

    AOP_1.入门及使用JDK中的Proxy技术实现实例

    在Java领域,我们可以使用Spring框架提供的AOP支持,但本实例主要讨论的是如何使用JDK自身的动态代理(Proxy)技术来实现AOP。 JDK的Proxy类提供了创建动态代理对象的能力,这个代理对象可以代表一个或多个实现了...

    Spring_0300_JDKProxy

    标题"Spring_0300_JDKProxy"暗示我们将讨论Spring如何使用JDK的Proxy类来实现动态代理。在Spring中,`org.springframework.aop.framework.ProxyFactoryBean`或`org.springframework.aop.framework.ProxyFactory`可以...

    Proxy实现AOP切面编程案例

    Proxy是Java中一种常用的AOP实现方式,本文将通过一个实例介绍如何使用Proxy实现AOP切面编程。 什么是AOP? AOP是Aspect-Oriented Programming的缩写,意为面向方面编程。它是一种编程技术,可以将一些公共的功能...

    JavaEE JDK动态代理实现AOP切面功能

    JavaEE JDK动态代理是Java平台中实现面向切面编程(AOP)的一种方式,它允许我们在不修改原有代码的情况下,为已有对象添加额外的功能。在Java中,动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang.reflect...

    Spring Aop的底层实现技术 --- Jdk动态代理原理

    Spring AOP 的底层实现技术 --- Jdk 动态代理原理 JDK 动态代理是 Spring AOP 的底层实现技术,允许开发者在运行期...通过使用 JDK 动态代理,开发者可以轻松地实现 AOP 式的编程,并提高了系统的灵活性和可维护性。

    SpringIOC,DI+dynamic proxy 实现盗版AOP

    本文将深入探讨如何使用Spring的IOC和DI特性,结合动态代理(Dynamic Proxy)来实现一种类似AOP(面向切面编程)的功能,以达到在不修改原有代码的情况下增强或拦截方法调用的目的。 **一、Spring IOC(控制反转)*...

    JDK动态代理 spring aop 的原理

    Spring AOP则是在Spring框架中对AOP概念的实现,它利用了JDK动态代理或CGLIB(字节码增强)来实现。Spring AOP的主要目标是分离关注点,将非业务逻辑(如日志、事务管理)从核心业务代码中解耦出来。以下是Spring ...

    42 离开Spring AOP,我们如何实现AOP功能?慕课专栏1

    Spring AOP默认使用JDK动态代理来实现AOP功能。JDK动态代理基于Java反射API,它要求被代理的对象必须实现至少一个接口。如果目标类没有实现接口,或者希望进行更底层的代理(如方法拦截),Spring AOP会使用CGLIB库...

    实现AOP功能的jar包

    9. **代理(Proxy)**: 在Spring AOP中,为了实现切面功能,它创建了代理对象来包装原始的目标对象。有两种类型的代理:JDK动态代理和CGLIB代理。JDK代理用于实现了接口的目标对象,而CGLIB代理用于没有实现接口的类...

    模拟spring aop【一】基于jdk动态代理实现的aop

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者定义“切面”,...通过理解JDK动态代理的工作原理和Spring AOP的相关概念,我们可以更好地利用这一强大功能,提升应用程序的可维护性和灵活性。

    Spring学习笔记(14)----使用CGLIB实现AOP功能

    在本篇Spring学习笔记中,我们将探讨如何使用CGLIB库来实现AOP功能。 CGLIB(Code Generation Library)是一个强大的高性能的代码生成库,它被广泛用于动态代理和运行时织入AOP切面。在Spring中,如果目标类没有...

    反射实现 AOP 动态代理模式(Spring AOP 的实现原理)

    Spring框架中的AOP模块使用了动态代理来实现AOP概念。Spring AOP允许开发者定义切面,并在这些切面中指定拦截的方法。Spring AOP支持不同的代理策略,包括JDK动态代理和CGLIB代理。如果被代理的类没有实现接口,...

    从JDK动态代理到spring AOP

    在IT领域,动态代理和AOP(面向切面编程)是两...JDK动态代理适用于简单场景,而Spring AOP则提供了更强大的功能和更灵活的配置,适合大型项目。在日常开发中,理解并掌握这两者,无疑能提升我们的编程能力和项目质量。

    使用代理实现简易的spring aop功能

    在这个例子中,我们将探讨如何使用动态代理来实现一个简单的Spring AOP功能。 动态代理是Java提供的一种机制,它允许我们在运行时创建对象的代理,该对象可以代表原对象执行额外的操作。在Spring AOP中,有两种主要...

    AOP编程示例

    以下是一个JDK Proxy实现AOP的例子: ```java import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class JdkAOPExample { public static ...

    Spring-AOP-JDK动态代理

    以下是使用JDK动态代理实现Spring AOP的步骤: 1. **定义切面(Aspect)**:切面是AOP的核心,它封装了横切关注点。在Spring中,可以通过实现`org.aspectj.lang.annotation.Aspect`接口或者使用注解`@Aspect`来定义...

Global site tag (gtag.js) - Google Analytics