【问题标题】:@Inject comes null on @aspect@Inject 在 @aspect 上为空
【发布时间】:2015-06-04 22:49:28
【问题描述】:

我正在使用 CTW AspectJ,我正在尝试将一个字段@inject 到我的 Aspect 中。 注入的字段总是返回 null。

我正在使用基于 Java 的配置: @Configuration @EnableAspectJAutoProxy(proxyTargetClass=true) public class ServicesConfig..

Spring 本身是使用 org.springframework.web.context.support.AnnotationConfigWebApplicationContext 加载的

据我所知,我的 Aspect 不是使用 Spring 框架进行实例化,而是通过 aspectj 进行实例化。 使用 Spring 加载 Aspect 缺少什么?

这是我的方面的样子:

@Aspect
public class MyAspect {

    @Inject
    private SomeBean someBean;

    @Around("execution(* com.mypackages..*(..))")
    public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable   {
        Object result = null;
        //some Aspect logic
        return result;
    }
}

这就是 bean 的实例化方式,如果我尝试在应用程序中的其他任何地方 @inject 它,我将得到 bean。

@Named
@Scope(value = "prototype")
public class SomeBean{
    //bean logic
}

【问题讨论】:

  • 请给我们代码
  • 你的切面是否被注释为 Spring @Component?如果没有代码,我们只能猜测。
  • 我已经厌倦了使用和不使用@Component 并获得相同的结果。我已经添加了我的方面代码和 bean 代码。
  • 在注入之前是 bean 调用,您可以执行以下选项之一 1.不要使用 @inject 2 创建 bean 后处理器,在那里您可以做任何您想做的事情

标签: java spring aspectj spring-aop


【解决方案1】:

可以在here 找到带有 CTW 的 Spring-AspectJ 的文档。请注意,您必须使用@Configurable 注释您的@Aspect。 考虑到您可能错过了构建阶段或其中的一部分。我的意思是你必须包含 spring-aspects.jar 作为方面库(无论你使用的是 Maven 还是 Ant)。

另外,你可以找到很好的例子/答案here

【讨论】:

    猜你喜欢
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 2015-07-24
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    相关资源
    最近更新 更多