Java Springboot自动连线空值

Java Springboot自动连线空值,java,spring,spring-mvc,spring-boot,Java,Spring,Spring Mvc,Spring Boot,我对Spring&Spring boot相当陌生,试图用这些概念来概括我的想法。 我有一个示例类,这只是一个键入的代码来显示我正在尝试做什么。没有编译错误。启动服务器时,将执行MQConnection类代码,并读取和打印appapplication.properties中的mq属性。但是当另一个类尝试调用发送消息到MQ时,我看到了NUllPointerException @Component public class MQConnection { private String user

我对Spring&Spring boot相当陌生,试图用这些概念来概括我的想法。 我有一个示例类,这只是一个键入的代码来显示我正在尝试做什么。没有编译错误。启动服务器时,将执行MQConnection类代码,并读取和打印appapplication.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

    }

}
我错过了什么,这些自动连线和bean对我来说真的很困惑,因为我是春天世界的新手。我使用的是正确的流程还是完全荒谬的,我不知道

@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的连接的帮助(看起来像是另一个类)都不会由Spring容器实例化。如果您想使用类似Spring注释的约定,那么您必须使用例如
@Component
注释来注释您的类。否则Spring不会为您实例化此对象

有用的提示 尝试使用构造函数注入而不是字段注入。就像在
MQConnection
类中一样。您甚至可以使用
final
关键字标记构造中实例化的所有类字段,以便确保这些值在bean生命周期中不会改变(当然,如果它们是不可变的)。然后,
另一个类
可以如下所示:

public class AnotherClass {

    private final MQSendMessage messageq;

    @Autowired
    public AnotherClass(MQSendMessage messageq) {
        this.messageq = messageq
    }

    public doSomething() {
        messageq.sendMessage("hello world");
    }
}
Spring引导文档 另外,请仔细阅读上的Spring引导文档。它写得很好,详细描述了基本概念。这将使你的学习更容易、更快


我希望它能有所帮助。

看起来另一个类没有被Spring容器实例化。如果您想使用类似Spring注释的约定,那么您必须使用例如
@Component
注释来注释您的类。否则Spring不会为您实例化此对象

有用的提示 尝试使用构造函数注入而不是字段注入。就像在
MQConnection
类中一样。您甚至可以使用
final
关键字标记构造中实例化的所有类字段,以便确保这些值在bean生命周期中不会改变(当然,如果它们是不可变的)。然后,
另一个类
可以如下所示:

public class AnotherClass {

    private final MQSendMessage messageq;

    @Autowired
    public AnotherClass(MQSendMessage messageq) {
        this.messageq = messageq
    }

    public doSomething() {
        messageq.sendMessage("hello world");
    }
}
Spring引导文档 另外,请仔细阅读上的Spring引导文档。它写得很好,详细描述了基本概念。这将使你的学习更容易、更快



我希望它能有所帮助。

显示实际堆栈跟踪和它开始的代码。由于您还没有发布完整的代码,查看您的
init
方法似乎是在
mqconnection
实际可用之前将
connection
分配给它。请向我们展示您的stacktrace@ditstacktrace来自MQ连接,因为连接是空的。另一个类正在向连接所在的MQ发送消息null@M.Deinum我可以修改什么来解决问题,我非常需要它来修复显示实际的堆栈跟踪和它开始的代码。由于您还没有发布完整的代码查看您的
init
方法,看起来您正在将
mqconnection
分配给
connection
到它实际可用之前的早期。请向我们展示您的stacktrace@ditstacktrace来自MQ连接,因为该连接为空。另一个类正在向连接所在的MQ发送消息null@M.Deinum我可以修改什么来修复这个问题,我非常需要它来获得fixedIt,但它不起作用,控制器调用另一个类来进行一些解析并将消息发送到MQchannel@user525146如何将另一个类注入组件?您是使用类似于
@Autowired-AnotherClass-AnotherClass
的注入,还是使用
new-AnotherClass()
?如果手动创建此对象,则必须提供
MQSendMessage
,因为使用
new
构造创建对象时,不会从Spring端进行注入。不,我不是在创建对象。我在那个类中有一个静态方法,我直接从controller@user525146你能在你的问题中说明这个方法吗?若您从静态方法引用Springbean,那个么就保证了
NullPointerException
spring不会在静态上下文中注入任何内容。向我们显示此NPE发生的确切位置,以便我们可以帮助您找到问题的正确解决方案。我从MQ中看到NullPointerException的堆栈跟踪,因为连接值为nullIt's not work,控制器调用另一个类来执行一些解析并将消息发送到MQchannel@user525146如何将另一个类注入组件?您是使用类似于
@Autowired-AnotherClass-AnotherClass
的注入,还是使用
new-AnotherClass()
?如果手动创建此对象,则必须提供
MQSendMessage
,因为使用
new
构造创建对象时,不会从Spring端进行注入。不,我不是在创建对象。我在那个类中有一个静态方法,我直接从controller@user525146你能在你的问题中说明这个方法吗?若您从静态方法引用Springbean,那个么就保证了
NullPointerException
spring不会在静态上下文中注入任何内容。向我们显示此NPE发生的确切位置,以便我们可以帮助您找到问题的正确解决方案。我看到了MQ中NullPointerException的堆栈跟踪,因为连接值为null