首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spring + spring + aspectj

spring + spring + aspectj
EN

Stack Overflow用户
提问于 2016-01-26 18:21:00
回答 1查看 3.2K关注 0票数 1

我很难在Spring项目中使用方面。

作为切入点的方法运行良好,但没有通知。

下面是类,它启动整个spring引导,这是spring上下文的根:

代码语言:javascript
复制
@Lazy
@SpringBootApplication
@EnableAspectJAutoProxy(proxyTargetClass=true)
@Configuration
public class MainSpringBootClass{
    public static void main(String[] args)
    {
        SpringApplication.run(MainSpringBootClass.class, args);
    }
}

下面是带方法的类,即切入点。

代码语言:javascript
复制
@Component
@Log
@Aspect
@EnableAspectJAutoProxy(proxyTargetClass=true)
public class MyExampleClass
{
    public void example()
    {
        System.out.println("example");
    }
}

这是我的一面:

代码语言:javascript
复制
@Aspect
@Component
@EnableAspectJAutoProxy(proxyTargetClass=true)
public class MyAspect implements MethodBeforeAdvice
{
    @Pointcut("execution(* com.example.MyExampleClass.example())")
    public void asd()
    {
        // pointcut
    }

    @Before("asd()")
    public void login()
    {
        System.out.println("im am logging in");
    }

    @Before("execution(* com.example.MyExampleClass.example())")
    public void login2()
    {
        System.out.println("im am logging in2");
    }

    @Override
    public void before(Method method, Object[] args, Object target) throws Throwable
    {
        System.out.println("aop before");
    }
}

这是我的控制器:

代码语言:javascript
复制
@RestController
@EnableAspectJAutoProxy(proxyTargetClass=true)
public class MyExampleController
{
    private final MyExampleClass myExampleClass;

    @Inject
    public AdController(MyExampleClass myExampleClass)
    {
        this.myExampleClass = myExampleClass;
    }

    @RequestMapping("/")
    public String index()
    {
        myExampleClass.example();

        return "x";
    }
}

正如您所看到的,我一直试图用批注来强求正确的结果。我还在一些网站上看到,我需要特定的依赖关系,所以这里是我的(只粘贴那些与方面相关的):

代码语言:javascript
复制
compile 'org.springframework:spring-aop:+'
compile 'org.aspectj:aspectjrt:+'
compile 'org.aspectj:aspectjweaver:+'
compile 'cglib:cglib:+'
compile 'cglib:cglib-nodep:+'

所有依赖项都已成功下载,项目编译并运行良好。当我点击localhost:8080时,我会看到返回的值"x",在日志中我看到了“示例”。然而,我没有看到来自春季aop或aspectj的任何建议--我做错了什么?

我只是把这个项目作为沙箱来学习方面,所以我很想学习如何使用Spring和AspectJ来实现它。对我来说,最重要的是在没有XML的情况下完成这一切。

编辑:我在MyAspect中添加了简单的构造函数,并使用println来检查是否创建了它(毕竟它是带有@Component的普通spring ),而且它是由spring正确创建的。

编辑2: IntelliJ IDEA告诉我有关方法登录和login2的信息:“这个建议不建议任何方法”,但同时,我可以从字符串中跳转(通过控件-单击),这就是注释中的值,以纠正实现。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-26 20:08:36

你所需要的就是这样的东西:

代码语言:javascript
复制
@Aspect
@Component
public class MyAspect {

    @Before("execution(* com.example.MyExampleClass.example(..))")
    public void logBefore(JoinPoint pjp) throws Throwable {
        System.out.println("before...");
    }
}

您可能必须将所有aspectJ依赖项替换为spring-boot-starter-aop

下面是一个有效的示例项目(请参阅RestControllerAspect.java):

https://github.com/khoubyari/spring-boot-rest-example

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35021008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档