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;
}
}
分享到:
相关推荐
下面我们将详细讲解如何使用JDK Proxy实现Aop。 首先,我们需要定义一个接口,这个接口将代表我们要进行代理的目标对象的行为。例如,我们可以创建一个名为`Service`的接口: ```java public interface Service { ...
在Java中,我们可以使用JDK的动态代理(Proxy)来实现AOP的功能,这主要涉及到反射和接口编程。 **JDK动态代理的工作原理** JDK的Proxy类提供了一种机制,可以创建一个代理对象,该对象在调用方法时会执行自定义的...
本篇将深入探讨如何使用JDK的动态代理和CGLIB库来实现Spring中的AOP功能。 首先,我们来看JDK中的Proxy技术。JDK Proxy是Java提供的一种动态代理机制,它允许我们在运行时创建一个实现了特定接口的新类。这个新类...
### Java JDK 实现AOP详解 #### AOP的起源与发展 面向方面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,由施乐公司帕洛阿尔托研究中心(Xerox PARC)在20世纪90年代发明。AOP的初衷是为了更好地...
在Java领域,我们可以使用Spring框架提供的AOP支持,但本实例主要讨论的是如何使用JDK自身的动态代理(Proxy)技术来实现AOP。 JDK的Proxy类提供了创建动态代理对象的能力,这个代理对象可以代表一个或多个实现了...
标题"Spring_0300_JDKProxy"暗示我们将讨论Spring如何使用JDK的Proxy类来实现动态代理。在Spring中,`org.springframework.aop.framework.ProxyFactoryBean`或`org.springframework.aop.framework.ProxyFactory`可以...
Proxy是Java中一种常用的AOP实现方式,本文将通过一个实例介绍如何使用Proxy实现AOP切面编程。 什么是AOP? AOP是Aspect-Oriented Programming的缩写,意为面向方面编程。它是一种编程技术,可以将一些公共的功能...
JavaEE JDK动态代理是Java平台中实现面向切面编程(AOP)的一种方式,它允许我们在不修改原有代码的情况下,为已有对象添加额外的功能。在Java中,动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang.reflect...
Spring AOP 的底层实现技术 --- Jdk 动态代理原理 JDK 动态代理是 Spring AOP 的底层实现技术,允许开发者在运行期...通过使用 JDK 动态代理,开发者可以轻松地实现 AOP 式的编程,并提高了系统的灵活性和可维护性。
本文将深入探讨如何使用Spring的IOC和DI特性,结合动态代理(Dynamic Proxy)来实现一种类似AOP(面向切面编程)的功能,以达到在不修改原有代码的情况下增强或拦截方法调用的目的。 **一、Spring IOC(控制反转)*...
Spring AOP则是在Spring框架中对AOP概念的实现,它利用了JDK动态代理或CGLIB(字节码增强)来实现。Spring AOP的主要目标是分离关注点,将非业务逻辑(如日志、事务管理)从核心业务代码中解耦出来。以下是Spring ...
Spring AOP默认使用JDK动态代理来实现AOP功能。JDK动态代理基于Java反射API,它要求被代理的对象必须实现至少一个接口。如果目标类没有实现接口,或者希望进行更底层的代理(如方法拦截),Spring AOP会使用CGLIB库...
9. **代理(Proxy)**: 在Spring AOP中,为了实现切面功能,它创建了代理对象来包装原始的目标对象。有两种类型的代理:JDK动态代理和CGLIB代理。JDK代理用于实现了接口的目标对象,而CGLIB代理用于没有实现接口的类...
在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者定义“切面”,...通过理解JDK动态代理的工作原理和Spring AOP的相关概念,我们可以更好地利用这一强大功能,提升应用程序的可维护性和灵活性。
在本篇Spring学习笔记中,我们将探讨如何使用CGLIB库来实现AOP功能。 CGLIB(Code Generation Library)是一个强大的高性能的代码生成库,它被广泛用于动态代理和运行时织入AOP切面。在Spring中,如果目标类没有...
Spring框架中的AOP模块使用了动态代理来实现AOP概念。Spring AOP允许开发者定义切面,并在这些切面中指定拦截的方法。Spring AOP支持不同的代理策略,包括JDK动态代理和CGLIB代理。如果被代理的类没有实现接口,...
在IT领域,动态代理和AOP(面向切面编程)是两...JDK动态代理适用于简单场景,而Spring AOP则提供了更强大的功能和更灵活的配置,适合大型项目。在日常开发中,理解并掌握这两者,无疑能提升我们的编程能力和项目质量。
在这个例子中,我们将探讨如何使用动态代理来实现一个简单的Spring AOP功能。 动态代理是Java提供的一种机制,它允许我们在运行时创建对象的代理,该对象可以代表原对象执行额外的操作。在Spring 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 ...
以下是使用JDK动态代理实现Spring AOP的步骤: 1. **定义切面(Aspect)**:切面是AOP的核心,它封装了横切关注点。在Spring中,可以通过实现`org.aspectj.lang.annotation.Aspect`接口或者使用注解`@Aspect`来定义...