Spring 14 - Spring实现AOP流程 - 方法三:使用注解实现AOP

流程:
1.标记切面@Aspect
2.标记通知类型和切入点
4.标记@Component,注册bean

例:

package com.spring.qq.diy;

//使用注解方式实现aop

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class AnnotationPointCut {

    @Before("execution(* com.spring.qq.service.UserServiceImpl.*(..))")
    public void before(){
        System.out.println("------- before -----");
    }

    @After("execution(* com.spring.qq.service.UserServiceImpl.*(..))")
    public void after(){
        System.out.println("------- after -----");
    }
    
    @Around("execution(* com.spring.qq.service.UserServiceImpl.*(..))")
    public void around(ProceedingJoinPoint jp) throws Throwable {
        System.out.println("------ 环绕前 ------ ");
        System.out.println(jp.getSignature());
        jp.proceed();
        System.out.println("------ 环绕后 ------ ");
    }	
	

}

配置文件为:

<?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:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <bean id = "userServiceImpl" class="com.spring.qq.service.UserServiceImpl"/>
<!--    <bean id="annotationPointCut" class="com.spring.qq.diy.AnnotationPointCut"/>-->


    <!-- 开启注解支持-->
    <context:component-scan base-package="com.spring.qq.diy"/>
    <aop:aspectj-autoproxy/>

</beans>

测试:

package com.spring.qq.mytest;

import com.spring.qq.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyTest {

    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        UserService userService = context.getBean("userServiceImpl", UserService.class);

        userService.add(3);
        userService.multi(3);

    }
    }

输出结果为:

------ 环绕前 ------ 
void com.spring.qq.service.UserService.add(double)
------- before -----
x = 4.0
------ 环绕后 ------ 
------- after -----
------ 环绕前 ------ 
void com.spring.qq.service.UserService.multi(double)
------- before -----
x = 12.0
------ 环绕后 ------ 
------- after -----
<!-- 默认使用JDK实现AOP-->
<aop:aspectj-autoproxy/>
<!-- 使用cglib实现AOP-->
    <aop:aspectj-autoproxy proxy-target-class= "true"/>

注:
Service和ServiceImpl的代码在文章Sping 11里有.

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页