Springboot自动装配空值

时间:2017-08-22 04:53:01

标签: java spring spring-mvc spring-boot

我对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的连接

1 个答案:

答案 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 Boot文档

另请仔细阅读Spring Beans and dependency injection上的Spring Boot文档。编写得非常好,并详细描述了基本概念。它将使您的学习更轻松,更快捷。

我希望它有所帮助。