spring_AOP_annotation

例子下载

beans.xml

  首先,在配置文件配置好下面的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">


    <context:annotation-config />
    <context:component-scan base-package="com.bjsxt"/>
    <aop:aspectj-autoproxy />
</beans>

  其中<context:annotation-config />为声明使用annotation部分,<context:component-scan base-package="com.bjsxt"/>会使得程序运行时进行对com.bjsxt包及子包的扫描操作,<aop:aspectj-autoproxy />对于AOP的annotation来说最为主要,标志着可以使用AOP的annotion来进行操作。

Aspect

package com.bjsxt.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class LogInterceptor {
    @Pointcut("execution(public * com.bjsxt.service..*.add(..))")
    public void myMethod(){};

    @Around("myMethod()")
    public void aroundMethod(ProceedingJoinPoint pjp) throws Throwable {
        System.out.println("method around start");
        pjp.proceed();
        System.out.println("method around end");
    }

    @Before("myMethod()")
    public void before() {
        System.out.println("method before");
    }
}

@Aspect注释标志着此类为一个切面类。

@Pointcut作为切入点,@Pointcut("execution(public * com.bjsxt.service..*.add(..))")说明在调用com.bjsxt.service下面的包或其子包的add方法(任意参数)时调用下面的方法。

@Around("myMethod()")说明在myMethod()方法调用前运行一次下面的方法,在myMethod()方法调用结束后再调用一次下面的方法。

@Before("myMethod()")说明在myMethod()方法调用之前调用下面的方法。

spring_AOP_annotation

时间: 2024-12-21 07:00:32

spring_AOP_annotation的相关文章

Spring_AOP_Annotation使用Aspect实现动态代理

spring_aop_annotation 的实现: 1.1在beans.xml中加入aop的schema 1.2在xml中打开aop的自动检索 <aop:aspectj-autoproxy/> 1.3创建一个需要实现动态代理的类 1.4导入aspectj包,Spring使用的是aspect这个包来实现AOP,所以需要导入这个包. Maven之pom.xml : <dependency> <groupId>org.aspectj</groupId> <

Spring_AOP_XML使用Aspect实现动态代理(常用)

Spring_AOP_XML使用Aspect实现动态代理(常用) XML使用Aspect实现动态代理此方式比较常用,和使用注解最大的好处是我们不用每个方法前面定义横切点上面加入PointCut的说明,在XML中只需要定义一次就可以多出使用. 在上面Spring_AOP_Annotation使用Aspect实现动态代理的基础上修改,去除LogAspect中方法上的注解. XML文件配置: <?xml version="1.0" encoding="UTF-8"?

Spring AOP—注解配置方法的使用

Spring除了支持Schema方式配置AOP,还支持注解方式:使用@AspectJ风格的切面声明. 1 启用对@AspectJ的支持 Spring默认不支持@AspectJ风格的切面声明,为了支持需要使用如下配置: 这样Spring就能发现@AspectJ风格的切面并且将切面应用到目标对象. 2 声明切面 @AspectJ风格的声明切面非常简单,使用@Aspect注解进行声明: 然后将该切面在配置文件中声明为Bean后,Spring就能自动识别并进行AOP方面的配置: 该切面就是一个POJO,