【问题标题】:How inject a Spring-boot service into a aspectj class?如何将 Spring-boot 服务注入 aspectj 类?
【发布时间】:2019-12-05 05:43:57
【问题描述】:

我遇到了一个问题。我正在创建一个 aspectj 类,并且在我的类中我需要访问一个 spring-boot 服务,但是当我尝试使用 @Autowired 或通过构造函数注入它时,我遇到了一个错误:

“无法自动装配。找不到 'UserService' 类型的 bean”

这是我的课:

package com.ingressolive.bar.aop.interceptor;


@Aspect
@Configuration
public class TenantAspect {
    private final Logger log = LoggerFactory.getLogger(this.getClass());


    private final Environment env;

    @Autowired
    private UserService userService;


    public TenantAspect(Environment env) {
        this.env = env;

    }

    @Before("execution(* com.ingressolive.bar.service.*.*(..))")
    public void aroundExecution(JoinPoint pjp) {
        log.debug("##################################### Entered here !!!!!!!!!!!!!!!!!!!!!!!!!!");

    }
}

有人可以帮我吗?

【问题讨论】:

  • 您有任何注册为 bean 的 UserService 实例吗?好像你没有。
  • 你为什么在同一个班级同时使用@Aspect@Configuration?反正报错信息很具体。
  • 如果你删除方面部分并使类好旧的纯 java 你会得到同样的错误吗?
  • @DrPhil 关于配置我认为这样是正确的。 UserService 是一个bean,我通过注释自动装配在代码的其他地方使用它。当我删除这两个注释时,没有更多的错误。

标签: java spring-boot aspect


【解决方案1】:

您可以尝试使用组件而不是配置吗?我正在使用这样的方面,并且自动装配工作完美。

package com.ingressolive.bar.aop.interceptor;

@Aspect
@Component
public class TenantAspect {
   ...
}

也许您必须寻找其他配置问题,例如配置文件,未加载 xml 配置?如果您的 bean 有任何 xml 配置,请考虑使用以下模式:

package com.yourpackage.config;

@Configuration
@ImportResource(
        locations = {
                "classpath:/your-extra-config-1.xml",
                "classpath:/your-extra-config-2.xml",
        })
public class AppConfig {
    ...
}

【讨论】:

  • 发完这里,有个工作的朋友让我试试用注解“组件”,去掉注解“配置”。它工作,但不是很好,如果我声明一个在 UserService 中只返回一个字符串的方法,工作!但是,如果我有一个使用存储库的方法,例如,我会得到很多异常。我现在不在电脑前,明天我会在这里发布错误。
  • 请发布错误。听起来可能是 DAO 和服务在您的设置中混淆了。您应该在服务注入(自动装配)中使用 Dao,并且 Dao 实现应该使用 Repository 进行注释。并且一直使用接口,而不是能够通过接口代理它们的具体类。
  • 我不知道为什么,我现在正在测试,它只是工作。如您所说使用,没有注释“配置”并添加注释“组件”。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2016-08-16
  • 2021-05-04
  • 1970-01-01
  • 2016-05-30
  • 2017-07-03
  • 2019-04-14
  • 1970-01-01
  • 2017-10-30
相关资源
最近更新 更多