`

本人常用的两种spring aop实现方式

阅读更多

备忘一下, 基本的用法包括在配置文件中配置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实现机制

    Spring AOP主要通过两种方式实现:JDK动态代理和CGLIB代理。 - **JDK动态代理**: - 当目标对象实现了至少一个接口时,Spring会使用JDK的java.lang.reflect.Proxy类创建一个代理对象。 - 代理对象在调用实际方法...

    spring aop demo 两种实现方式

    本示例提供了一种通过注解和配置文件两种方式实现Spring AOP的方法。 首先,我们来详细讲解通过注解实现Spring AOP。在Spring中,我们可以使用`@Aspect`注解来定义一个切面,这个切面包含了多个通知(advice),即...

    spring aop实现原理

    NULL 博文链接:https://zhang-yingjie-qq-com.iteye.com/blog/319927

    基于注解实现SpringAop

    基于注解实现SpringAop基于注解实现SpringAop基于注解实现SpringAop

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

    动态代理是实现AOP的一种常用技术,它允许在运行时创建代理对象,拦截对真实对象的调用,并在调用前后添加额外的行为。 在Java开发中,反射机制是实现动态代理的关键技术之一。反射提供了在运行时访问和操作类的...

    死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理(csdn)————程序.pdf

    在 Spring 中,AOP 的实现主要依赖于代理模式,有两种代理方式:JDK 动态代理和 CGLIB 动态代理。 JDK 动态代理是基于接口的,它要求被代理的目标对象必须实现至少一个接口。Spring 使用 `java.lang.reflect.Proxy`...

    Spring AOP 常用的四种实现方式

    本篇文章将深入探讨Spring AOP的四种常见实现方式。 一、基于接口的代理(Interface-Based Proxy) 这是Spring AOP最基础的实现方式,适用于目标对象实现了特定接口的情况。Spring会创建一个代理对象,该对象实现...

    spring aop jar 包

    Spring AOP支持三种织入方式:编译时织入、加载时织入和运行时织入。Spring默认使用运行时织入,通过动态代理实现。 6. **代理(Proxy)**:代理是AOP的核心,它是目标对象的增强版本,负责在调用目标方法前后执行...

    Spring AOP 16道面试题及答案.docx

    Spring支持两种AOP的实现方式:Spring AspectJ注解风格和Spring XML配置风格。使用AspectJ注解风格是最常见的,它允许开发者直接在方法上使用注解来定义切面。 Spring AOP中有五种不同类型的的通知(Advice): 1....

    Spring AOP 常用的四种实现方式的代码

    本篇文章将详细讲解Spring AOP的四种常见实现方式,以帮助开发者更好地理解和运用这一功能。 一、基于接口的代理(Interface-Based Proxy) 这是Spring AOP的默认实现方式,适用于目标对象实现了接口的情况。Spring...

    使用Spring的注解方式实现AOP的细节

    在Spring框架中,面向切面编程(AOP)是一种强大的工具,它允许程序员定义横切关注点,如日志、事务管理、权限控制等,这些关注点可以被模块化并独立于业务逻辑进行处理。本篇文章将深入探讨如何通过Spring的注解...

    简单spring aop 例子

    在Spring AOP中,切面主要通过两种方式实现:代理(Proxies)和织入(Weaving)。 1. **代理**:Spring AOP支持两种类型的代理:JDK动态代理和CGLIB代理。JDK代理用于实现了接口的类,而CGLIB代理则用于没有接口或...

    Spring Aop的简单实现

    在本项目中,我们将探讨如何通过配置文件实现Spring AOP,包括前置通知、后置通知以及拦截器的运用。 首先,我们需要理解Spring AOP的核心概念。切面(Aspect)是关注点的模块化,这些关注点定义了跨越多个对象的...

    Spring AOP的简单实现

    在Spring AOP中,切面可以通过两种方式定义:使用注解或者XML配置。在这个例子中,我们可能会选择注解方式,因为它更简洁且易于理解。 1. **创建切面类(Aspect)** 我们可以创建一个名为`LoggingAspect`的Java类...

    springAop默认代理方式.zip

    1. **静态代理**:Spring AOP 提供了两种代理方式,一种是静态代理,另一种是动态代理。静态代理是在编译时就确定了代理类,这种代理方式通常通过实现相同接口的方式创建。然而,Spring AOP默认并不使用静态代理,...

    spring aop注解方式、xml方式示例

    Spring AOP提供了注解和XML两种方式来实现切面编程。注解方式更加简洁,易于理解和维护,适用于大多数情况。而XML配置方式则在复杂场景下更具灵活性,如需要动态调整切面配置时。在实际项目中,可以根据需求选择适合...

    springAop的配置实现

    - **代理(Proxy)**:Spring AOP通过代理模式来实现切面功能,有JDK动态代理和CGLIB代理两种方式。 **2. JDK 动态代理** - 当目标类实现了接口时,Spring AOP会选择使用JDK动态代理。它会生成一个实现了目标类所有...

    Spring实现AOP的4种方式

    本篇文章将详细探讨Spring实现AOP的四种主要方法:基于代理的方式、基于AspectJ的注解方式、基于XML的AOP配置以及基于Java的AOP配置。 1. 基于代理的实现 Spring的AOP支持两种代理类型:JDK动态代理和CGLIB代理。...

    初探spring aop内部实现 java

    Spring AOP的实现主要依赖于两种技术:动态代理和AspectJ。对于接口,Spring使用Java动态代理(JDK Proxy)创建代理对象;而对于类,Spring则使用CGLIB库生成子类代理。这两种方式都是在运行时生成代理对象,从而在...

    Spring  AOP实现方法大全

    总结来说,Spring AOP通过四种类型的Advice提供了灵活的横切关注点实现,使得我们可以将关注点从核心业务逻辑中分离出来,从而实现代码的解耦和复用。无论是使用传统的API还是现代的注解方式,Spring AOP都能帮助...

Global site tag (gtag.js) - Google Analytics