备忘一下, 基本的用法包括在配置文件中配置pointcut, 在java中用编写实际的aspect 类, 针对对切入点进行相关的业务处理.
配置文件如下
<?xml version="1.0" encoding="GBK"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-2.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"
default-autowire="byName">
<!-- aop 拦截器配置 -->
<aop:aspectj-autoproxy />
<bean id="cachedDAO" class="com.mysoft.cache.CacheAspect" >
</bean>
<aop:config>
<aop:aspect ref="cachedDAO">
<aop:around pointcut="execution(* com.mysoft.dao.DAO.getById(long)) and args(Id)" method="getById" arg-names="join,Id"/>
</aop:aspect>
</aop:config>
</beans>
aspect java类如下:
public class CacheAspect {
public Object getSpuById(ProceedingJoinPoint join, long spuId) throws Throwable {
...
}
}
所有的就这么简单, 全部搞定, 在需要的地方将该bean配置文件引入即可.
第二种方式, 采用注解来做aop, 主要是将写在spring 配置文件中的连接点, 写到注解里面
spring aop配置文件:
<!-- aop 拦截器配置 -->
<aop:aspectj-autoproxy />
<bean id="mockAspect" class="com.taobao.item.mock.aspect.MockAspect" lazy-init="false">
</bean>
用来定义连接点和拦截处理的java类:
@Aspect
public class MockAspect {
@Pointcut("execution(* com.mysoft.manager.propertyManager.*(. .))")
public void propertyManager() throws Throwable {
}
@Pointcut("execution(* com.mysoft.manager.impl.TxtFileManager.*(. .))")
public void txtFileManager() {
}
@Pointcut("execution(* com.mysoft.manager.KeywordsChecker.checkNormalKeywords(. .))")
public void checkNormalKeywords() {
}
@Pointcut("execution(* com.mysoft.manager.KeywordsChecker.checkFixKeywords()) && args(text, ..)")
public void checkFixKeywords(String text) {
}
@Around("propertyManager() || txtFileManager()")
public Object invoke(ProceedingJoinPoint join) throws Throwable {
return null;
}
@Around("checkNormalKeywords()")
public String invokeAndReturnString(ProceedingJoinPoint join) throws
Throwable {
return "";
}
/**
* @param text
* @return
* @throws Throwable
*/
@Around(value = "checkFixKeywords(text)")
public String invokeCheckFixKeywords(ProceedingJoinPoint join, String
text)
throws Throwable {
if ("abcflg".equals(text)) {
return "flg";
}
return null;
}
这里的配置很容易写错, 故我个人还是倾向于在配置文件中写pointcut表达式.
分享到:
相关推荐
Spring AOP主要通过两种方式实现:JDK动态代理和CGLIB代理。 - **JDK动态代理**: - 当目标对象实现了至少一个接口时,Spring会使用JDK的java.lang.reflect.Proxy类创建一个代理对象。 - 代理对象在调用实际方法...
本示例提供了一种通过注解和配置文件两种方式实现Spring AOP的方法。 首先,我们来详细讲解通过注解实现Spring AOP。在Spring中,我们可以使用`@Aspect`注解来定义一个切面,这个切面包含了多个通知(advice),即...
NULL 博文链接:https://zhang-yingjie-qq-com.iteye.com/blog/319927
基于注解实现SpringAop基于注解实现SpringAop基于注解实现SpringAop
动态代理是实现AOP的一种常用技术,它允许在运行时创建代理对象,拦截对真实对象的调用,并在调用前后添加额外的行为。 在Java开发中,反射机制是实现动态代理的关键技术之一。反射提供了在运行时访问和操作类的...
在 Spring 中,AOP 的实现主要依赖于代理模式,有两种代理方式:JDK 动态代理和 CGLIB 动态代理。 JDK 动态代理是基于接口的,它要求被代理的目标对象必须实现至少一个接口。Spring 使用 `java.lang.reflect.Proxy`...
本篇文章将深入探讨Spring AOP的四种常见实现方式。 一、基于接口的代理(Interface-Based Proxy) 这是Spring AOP最基础的实现方式,适用于目标对象实现了特定接口的情况。Spring会创建一个代理对象,该对象实现...
Spring AOP支持三种织入方式:编译时织入、加载时织入和运行时织入。Spring默认使用运行时织入,通过动态代理实现。 6. **代理(Proxy)**:代理是AOP的核心,它是目标对象的增强版本,负责在调用目标方法前后执行...
Spring支持两种AOP的实现方式:Spring AspectJ注解风格和Spring XML配置风格。使用AspectJ注解风格是最常见的,它允许开发者直接在方法上使用注解来定义切面。 Spring AOP中有五种不同类型的的通知(Advice): 1....
本篇文章将详细讲解Spring AOP的四种常见实现方式,以帮助开发者更好地理解和运用这一功能。 一、基于接口的代理(Interface-Based Proxy) 这是Spring AOP的默认实现方式,适用于目标对象实现了接口的情况。Spring...
在Spring框架中,面向切面编程(AOP)是一种强大的工具,它允许程序员定义横切关注点,如日志、事务管理、权限控制等,这些关注点可以被模块化并独立于业务逻辑进行处理。本篇文章将深入探讨如何通过Spring的注解...
在Spring AOP中,切面主要通过两种方式实现:代理(Proxies)和织入(Weaving)。 1. **代理**:Spring AOP支持两种类型的代理:JDK动态代理和CGLIB代理。JDK代理用于实现了接口的类,而CGLIB代理则用于没有接口或...
在本项目中,我们将探讨如何通过配置文件实现Spring AOP,包括前置通知、后置通知以及拦截器的运用。 首先,我们需要理解Spring AOP的核心概念。切面(Aspect)是关注点的模块化,这些关注点定义了跨越多个对象的...
在Spring AOP中,切面可以通过两种方式定义:使用注解或者XML配置。在这个例子中,我们可能会选择注解方式,因为它更简洁且易于理解。 1. **创建切面类(Aspect)** 我们可以创建一个名为`LoggingAspect`的Java类...
1. **静态代理**:Spring AOP 提供了两种代理方式,一种是静态代理,另一种是动态代理。静态代理是在编译时就确定了代理类,这种代理方式通常通过实现相同接口的方式创建。然而,Spring AOP默认并不使用静态代理,...
Spring AOP提供了注解和XML两种方式来实现切面编程。注解方式更加简洁,易于理解和维护,适用于大多数情况。而XML配置方式则在复杂场景下更具灵活性,如需要动态调整切面配置时。在实际项目中,可以根据需求选择适合...
- **代理(Proxy)**:Spring AOP通过代理模式来实现切面功能,有JDK动态代理和CGLIB代理两种方式。 **2. JDK 动态代理** - 当目标类实现了接口时,Spring AOP会选择使用JDK动态代理。它会生成一个实现了目标类所有...
本篇文章将详细探讨Spring实现AOP的四种主要方法:基于代理的方式、基于AspectJ的注解方式、基于XML的AOP配置以及基于Java的AOP配置。 1. 基于代理的实现 Spring的AOP支持两种代理类型:JDK动态代理和CGLIB代理。...
Spring AOP的实现主要依赖于两种技术:动态代理和AspectJ。对于接口,Spring使用Java动态代理(JDK Proxy)创建代理对象;而对于类,Spring则使用CGLIB库生成子类代理。这两种方式都是在运行时生成代理对象,从而在...
总结来说,Spring AOP通过四种类型的Advice提供了灵活的横切关注点实现,使得我们可以将关注点从核心业务逻辑中分离出来,从而实现代码的解耦和复用。无论是使用传统的API还是现代的注解方式,Spring AOP都能帮助...