为了账号安全,请及时绑定邮箱和手机立即绑定

不满足的依赖关系 - 创建 Bean 时出错

不满足的依赖关系 - 创建 Bean 时出错

大话西游666 2022-06-23 15:49:46
我按照本教程创建了简单的 JMS 相关应用程序,但我不断收到异常(下面粘贴了堆栈跟踪)我尝试查看其他类似的线程,并且在许多地方看起来人们要求在界面中添加 @Repository 注释,但我的界面没有扩展任何存储库。我的代码如下所示:JmsClient.javapublic interface JmsClient {    public void send(String msg);    public String receive();}JmsClientImpl.java@Servicepublic class JmsClientImpl implements JmsClient{    @Autowired    JmsConsumer jmsConsumer;    @Autowired    JmsProducer jmsProducer;    @Override    public void send(String msg) {        jmsProducer.send(msg);    }    @Override    public String receive() {        return jmsConsumer.receive();    }}JmsConsumer.java@Componentpublic class JmsConsumer {    @Autowired    JmsTemplate jmsTemplate;    @Value("${jms.queue.destination}")    String destinationQueue;    public String receive(){        return (String)jmsTemplate.receiveAndConvert(destinationQueue);     }}WebController.java@RestControllerpublic class WebController {    @Autowired    JmsClient jsmClient;    @RequestMapping(value="/produce")    public String produce(@RequestParam("msg")String msg){        jsmClient.send(msg);        return "Done";    }    @RequestMapping(value="/receive")    public String receive(){        return jsmClient.receive();    }}JmsProducer.java@Componentpublic class JmsProducer {    @Autowired    JmsTemplate jmsTemplate;    @Value("${jms.queue.destination}")    String destinationQueue;    public void send(String msg){        jmsTemplate.convertAndSend(destinationQueue, msg);    }}
查看完整描述

1 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

您遇到的问题是 Spring 无法实例化@Autowired您指定的类。


它无法实例化这些类的原因是它找不到它们所依赖的类,如堆栈跟踪底部所示:


Caused by: java.lang.NoClassDefFoundError: javax/jms/JMSContext

    at java.lang.Class.getDeclaredMethods0(Native Method) ~[na:1.8.0_191]

    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[na:1.8.0_191]

    at java.lang.Class.getDeclaredMethods(Class.java:1975) ~[na:1.8.0_191]

    at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:668) ~[spring-core-5.1.5.RELEASE.jar:5.1.5.RELEASE]

    ... 62 common frames omitted

Caused by: java.lang.ClassNotFoundException: javax.jms.JMSContext

    at java.net.URLClassLoader.findClass(URLClassLoader.java:382) ~[na:1.8.0_191]

    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_191]

    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) ~[na:1.8.0_191]

    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_191]

    ... 66 common frames omitted

如此处所述,这意味着您需要获取可供应用程序加载的 JMS 库。


在您的 pom 中,您没有指定spring-jms要使用的版本,因此您获得的版本可能不包含您需要的库。


您可以更新您的 pom 以获得最新版本,如下所述:


<!-- https://mvnrepository.com/artifact/org.springframework/spring-jms -->

<dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-jms</artifactId>

    <version>5.1.5.RELEASE</version>

</dependency>

或者,您可以通过将以下内容添加到您的 pom(在此处找到)来显式包含 JMS 库:


<!-- https://mvnrepository.com/artifact/javax.jms/javax.jms-api -->

<dependency>

    <groupId>javax.jms</groupId>

    <artifactId>javax.jms-api</artifactId>

    <version>2.0.1</version>

</dependency>

希望其中之一将允许 Spring 实例化所有 bean 并启动应用程序。


查看完整回答
反对 回复 2022-06-23
  • 1 回答
  • 0 关注
  • 219 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信