AOP一般用来做权限判断:
思考问题方法叫做:横切性关注点
1.拦截所有方法
2.判断用户是否有权限,有权限就允许执行业务方法,否者不执行。
假如不使用AOP框架,可以利用“代理模式”来解决
user-------代理对象---------目标对象
代理对象的创建:
1.静态代理(企业应用,很少用)
2.动态代理
前提是目标对象是面向接口
首先写一个接口:
public interface PersonService {
public void save(String name);
public void update(String name, Integer personid);
public String getPersinName(Integer personid);
}
提供一个业务Bean实现该接口:
public class PersonServiceBean implements PersonService {
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
private String user=null;
public PersonServiceBean(){}
public PersonServiceBean(String user) {
this.user = user;
}
public String getPersinName(Integer personid) {
return "xxx";
}
public void save(String name) {
System.out.println("I am save");
}
public void update(String name, Integer personid) {
System.out.println("I am update");
}
}
现在需要拦截PersonServiceBean的所有方法,使用代理技术,需要使用的类:
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
然后创建代理工厂
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import cn.itcast.servrice.impl.PersonServiceBean;
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);
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
PersonServiceBean bean = (PersonServiceBean) this.targetObject;
Object result =null;
if (bean.getUser() != null) {
result = method.invoke(targetObject, args);
}
return result;
}
}
创建测试函数
public class AOpTest {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@Test public void proxyTest(){
JDKProxyFactory factory =new JDKProxyFactory();
PersonService service = (PersonService)factory.createProxyInstance(new PersonServiceBean());
service.save("888");
}
}
分享到:
相关推荐
基于注解实现SpringAop基于注解实现SpringAop基于注解实现SpringAop
在Spring框架中,面向切面编程(AOP)是一种强大的工具,它允许程序员定义横切关注点,如日志、事务管理、权限控制等,这些关注点可以被模块化并独立于业务逻辑进行处理。本篇文章将深入探讨如何通过Spring的注解...
在本项目中,我们将探讨如何通过配置文件实现Spring AOP,包括前置通知、后置通知以及拦截器的运用。 首先,我们需要理解Spring AOP的核心概念。切面(Aspect)是关注点的模块化,这些关注点定义了跨越多个对象的...
Spring AOP(面向切面编程)是Spring框架中的一个重要组件,它允许我们在不修改源代码的情况下,通过在程序运行时动态地将代码插入到方法调用中,来实现跨切面的关注点,如日志记录、性能监控、事务管理等。而Spring...
本示例是关于如何在Spring Boot项目中实现AOP功能的一个简单演示。 首先,我们需要了解AOP的基本概念。AOP的核心是切面(Aspect),它封装了跨越多个对象的行为或关注点,如日志记录。切点(Pointcut)定义了在何处...
动态代理是实现AOP的一种常用技术,它允许在运行时创建代理对象,拦截对真实对象的调用,并在调用前后添加额外的行为。 在Java开发中,反射机制是实现动态代理的关键技术之一。反射提供了在运行时访问和操作类的...
在这个场景中,我们将使用Spring AOP来实现一个日志记录的功能,以追踪系统中各个方法的调用情况,包括访问时间以及传递的参数。下面将详细阐述如何实现这一目标。 首先,我们需要了解AOP的基本概念。AOP的核心是切...
**Spring AOP 实现机制详解** Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许程序员在不修改源代码的情况下,通过“切面”来插入额外的业务逻辑,如日志、事务管理等。AOP的引入极大地提高了代码的...
在Spring中,AOP的实现依赖于两个主要组件:通知(Advice)和切点(Pointcut)。通知是实际执行的增强代码,如方法调用前的记录日志;切点是通知应该应用到的方法或类。Spring支持五种类型的的通知:前置通知...
NULL 博文链接:https://zhang-yingjie-qq-com.iteye.com/blog/319927
在Spring中,AOP主要是通过代理模式实现的,有JDK动态代理和CGLIB两种方式。 对于Spring事务管理,我们通常有两种方式:编程式和声明式。编程式事务管理需要在代码中显式地调用begin、commit、rollback等事务控制...
Spring AOP通过XML配置文件提供了灵活的方式来定义和管理切面、切入点和通知,使得我们可以轻松地在应用程序中实现横切关注点的解耦。了解和掌握Spring AOP的配置实现,有助于提升我们构建松散耦合、易于维护的系统...
Spring AOP在事务管理中扮演了关键角色,通过ProxyTransactionManagementConfiguration和BeanFactoryTransactionAttributeSourceAdvisor等配置,以及TransactionInterceptor实现的MethodInterceptor,实现了基于代理...
本篇文章将详细探讨Spring实现AOP的四种主要方法:基于代理的方式、基于AspectJ的注解方式、基于XML的AOP配置以及基于Java的AOP配置。 1. 基于代理的实现 Spring的AOP支持两种代理类型:JDK动态代理和CGLIB代理。...
在 Spring 中,AOP 的实现主要依赖于代理模式,有两种代理方式:JDK 动态代理和 CGLIB 动态代理。 JDK 动态代理是基于接口的,它要求被代理的目标对象必须实现至少一个接口。Spring 使用 `java.lang.reflect.Proxy`...
Spring AOP(面向切面编程)是Spring框架中的一个重要组件,它允许我们在不修改源代码的情况下,对程序的行为进行统一的管理和控制。本篇文章将深入探讨Spring AOP的内部实现,以及如何通过源代码理解其DataSource...
在Spring MVC框架中,AOP通常用于实现日志记录、事务管理、性能监控等功能。本篇文章将深入探讨如何在Spring MVC中配置和使用基于注解的AOP。 一、Spring AOP基础知识 1. **切面(Aspect)**:切面是关注点的模块...
Spring通过反射机制来实现这一过程,比如在上述的`TestIOC`例子中,Spring能够根据类名动态地创建对象,并通过setter方法注入属性值,实现了对象的实例化和配置。 **依赖注入(DI)**有多种实现方式,包括构造器...
在Spring 1.2及更早版本中,实现AOP通常依赖于Spring的AOP API,通过创建Advice(通知)并设置代理对象来完成。 Spring提供了四种主要类型的Advice,每种类型对应于方法执行的不同阶段: 1. **Before Advice**:在...
下面我们将深入探讨Spring AOP的底层实现技术和相关知识点。 1. **代理模式** Spring AOP基于两种代理机制实现:JDK动态代理和CGLIB代理。JDK动态代理适用于实现了接口的目标对象,通过反射机制创建一个代理类来...