javaConfig 配置AOP 注意事项

Posted 闲言_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaConfig 配置AOP 注意事项相关的知识,希望对你有一定的参考价值。

前言

  • 今天心血来潮想重温一遍spring 纯注解开发,在编写注解AOP的时候遇到一个问题,发现自定义的切面类不起作用,在切面类上添加@Aspect 注解、@Component 注解了,配置类也扫描该包了,就是不起作用,也不抛出异常,后面通过百度才发现还需要在配置类中添加@EnableAspectJAutoProxy注解,表示开启AOP 代理自动配置

配置类代码

/**
 * @Classname MyConfig
 * @Description 配置类
 * @Date 2021/5/17 19:55
 * @Created by 闲言
 */
@Configuration
@ComponentScan(basePackages = {"cn.bloghut.log"})
@EnableAspectJAutoProxy
public class MyConfig {


    @Bean
    public UserService getUserService(){
        return new UserServiceImpl();
    }

}

切面类代码

/**
 * @Classname Logs
 * @Description 自定义切面类
 * @Date 2021/5/17 19:58
 * @Created by 闲言
 */
@Aspect
@Component
public class Logs {
    /**
     * 定义切入点
     */
    @Pointcut("execution(* cn.bloghut.service.impl.UserServiceImpl.*(..))")
    public void pit() {
    }

    @Before("pit()")
    public void before(){
        System.out.println("===========before 前置通知===========");
    }

    @After("pit()")
    public void after(){
        System.out.println("============after 后置通知=============");
    }

}

业务层代码(接口)

在这里插入代码片
/**
 * @Classname UserService
 * @Description 用户CRUD 接口
 * @Date 2021/5/17 19:55
 * @Created by 闲言
 */
public interface UserService {
    /**
     * 添加方法
     */
    void add();

    /**
     * 删除方法
     */
    void delete();

    /**
     * 修改方法
     */

    void update();

    /**
     * 查找方法
     */
    void query();
}

业务层代码(实现类)

/**
 * @Classname UserServiceImpl
 * @Description 用户接口实现类
 * @Date 2021/5/17 19:56
 * @Created by 闲言
 */
@Service
public class UserServiceImpl implements UserService {

    public void add() {
        System.out.println("add 方法执行了");
    }

    public void delete() {
        System.out.println("delete 方法执行了");
    }

    public void update() {
        System.out.println("update 方法执行了");
    }

    public void query() {
        System.out.println("query 方法执行了");
    }
}

测试类

/**
 * @Classname Test
 * @Description 测试类
 * @Date 2021/5/17 20:01
 * @Created by 闲言
 */
public class Test {
    public static void main(String[] args) {

        ApplicationContext ac = new AnnotationConfigApplicationContext(MyConfig.class);
        UserService userService = ac.getBean("getUserService", UserService.class);
        userService.delete();
    }
}

输出结果

===========before 前置通知===========
delete 方法执行了
============after 后置通知=============

以上是关于javaConfig 配置AOP 注意事项的主要内容,如果未能解决你的问题,请参考以下文章

spring javaConfig配置代替xml配置

IOC和AOP是什么鬼?

JAVA之AOP

AOP开发明确的的事项

使用JavaConfig方式配置dubbox

Spring JavaConfig配置