我对Spring& amp;春天的靴子,试图用概念包裹我的脑袋。 我有这个示例类,这只是一个打字代码来显示我正在尝试做的事情。没有编译错误。当我启动服务器时,执行MQConnection类代码,读取和打印appplication.properties中的mq属性。但是当另一个类试图将发送消息调用到MQ时,我看到了NUllPointerException
@Component
public class MQConnection {
private String username;
private String password;
private String host;
private Connection connection;
@Autowired
public MQConnection(@value("${username}") String username,
@value("${password}") String password, @value("${host}") String host) {
this.username = username;
this.password = password;
this.host = host;
init();
}
public getConnection() {
return connection
}
private init() {
connection = mqconnection;
System.out.println(username, password, host); // I see the value when the server is started
//code to connect to mq
}
}
我缺少什么,这些自动装配&豆子对我来说真的很困惑,因为我是Spring世界的新手。我使用正确的流程还是完全荒谬的,我不知道
@Component
public class MQSendMessage {
@Autowired
MQConnection mqConnection;
public void sendMessage(String message) {
connection = mqConnection.getConnection(); //NULL value
//send messageCode throws nullpointerexception
}
}
public class AnotherClass {
@Autowired
MQSendMessage messageq;
public doSomething() {
messageq.sendMessage("hello world");
}
}
任何帮助修复抛出nullpointer的连接
答案 0 :(得分:0)
看起来AnotherClass
没有被Spring容器实例化。如果你想使用类似于约定的Spring-annotation,那么你必须使用例如@Component
注释来注释你的类。否则Spring不会为你实例化这个对象。
尝试使用构造函数注入而不是字段注入。就像你的MQConnection
课程一样。您甚至可以使用final
关键字标记在构造中实例化的所有类字段,这样您就可以确保在bean生命周期中这些值不会更改(如果它们当然是不可变的)。然后AnotherClass
可能如下所示:
public class AnotherClass {
private final MQSendMessage messageq;
@Autowired
public AnotherClass(MQSendMessage messageq) {
this.messageq = messageq
}
public doSomething() {
messageq.sendMessage("hello world");
}
}
另请仔细阅读Spring Beans and dependency injection上的Spring Boot文档。编写得非常好,并详细描述了基本概念。它将使您的学习更轻松,更快捷。
我希望它有所帮助。