使用@Autowired 注入实现ApplicationListener 的bean 不起作用?

发布于 2024-11-19 11:33:41 字数 634 浏览 2 评论 0原文

我有一个服务bean(用@Service注释),它为扩展ApplicationEvent抽象类的T类型事件对象实现ApplicationListener接口。 Spring 文档中有一个非常简单明了的示例 here

但是,当我尝试使用 @Autowired 将此 bean 注入其他 bean 时,我得到的是:

org.springframework.beans.factory.NoSuchBeanDefinitionException:否 为依赖项找到了 [...] 类型的匹配 bean:预计至少有 1 个 bean 有资格作为此依赖项的自动装配候选者。 依赖注释 {@org.springframework.beans.factory.annotation.Autowired(required=true)}

如果我尝试使用 @Resource 之类的东西,那么我会得到一个类转换异常(尝试注入一种类型的资源但获取代理)。

I have a service bean (annotated with @Service) which implements the ApplicationListener inteface for T type of event objects that extend the ApplicationEvent abstract Class. There is a pretty simple and clear example of this in the Spring docs here

However when i attempt to inject this bean into other ones using @Autowired i get is:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No
matching bean of type [...] found for dependency: expected at least 1
bean which qualifies as autowire candidate for this dependency.
Dependency annotation
{@org.springframework.beans.factory.annotation.Autowired(required=true)}

If i try to use something like @Resource then i get a class cast exception (attempting to inject a resource of one type but getting a Proxy).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

最美的太阳 2024-11-26 11:33:41

如果我尝试使用 @Resource 之类的东西,那么我会得到一个类转换
异常(尝试注入一种类型的资源但得到
代理)。

这听起来像是您试图按类引用它,而它是作为基于接口的 JDK 代理连接的。

如果您有此类:

@Service
public class FooServiceImpl implements FooService{}

将其连接为:

@Autowired
private FooService fooService;

而不是:

@Autowired
private FooServiceImpl fooService;

参考:

If i try to use something like @Resource then i get a class cast
exception (attempting to inject a resource of one type but getting a
Proxy).

This sounds like you are trying to reference it by class, whereas it is wired as an interface-based JDK proxy.

If you have this class:

@Service
public class FooServiceImpl implements FooService{}

wire it as:

@Autowired
private FooService fooService;

not as:

@Autowired
private FooServiceImpl fooService;

Reference:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文