spring 项目注解实现aop无效果

问题描述

使用@Aspect@Before()注解,运行无报错,但是没有相关注入效果

相关文件

beans.xml

<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"
       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">

    <bean id="personService" class="DefaultPersonService"/>
    <bean id="profiler" class="SimpleProfiler"/>
    <aop:aspectj-autoproxy/>
</beans>

相应类

public class DefaultPersonService {

    public Person getPerson() {
        System.out.println("bbb");
        return new Person();
    }
}
public class Person {
    public Person() {

    }
}
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect
public class SimpleProfiler {
    @Before("execution(* DefaultPersonService.*(String)) && args(name)")
    public void profile(String name) throws Throwable {
        System.out.println("aaaa");
    }
}

运行类

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Boot {

    public static void main(final String[] args) throws Exception {
        BeanFactory ctx = new ClassPathXmlApplicationContext("beans.xml");
        DefaultPersonService person = (DefaultPersonService) ctx.getBean("personService");
        person.getPerson();
    }
}

运行截图&我的期望

运行截图
image.png

期望运行结果:
aaaa
bbb

运行环境

interllij开发版2021.3
jdk1.8
spring 5
该项目为基于maven的spring项目

相应文件下载

【为方便排错,项目已放在和彩云,链接: https://caiyun.139.com/m/i?0d... 提取码:ikFA 】

阅读 1.8k
1 个回答

DefaultPersonService.getPerson() 并没有参数。

public class DefaultPersonService {
    public Person getPerson(String arg) {
        System.out.println("bbb");
        return new Person();
    }
}
    public static void main(String[] args) {
        BeanFactory ctx = new ClassPathXmlApplicationContext("beans.xml");
        DefaultPersonService person = (DefaultPersonService) ctx.getBean("personService");
        person.getPerson("arg");
    }
    @Before("execution(* DefaultPersonService.*(..)) && args(arg)" )
    public void profile(String arg)  {
        System.out.println(arg);
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题