我刚刚开始学习Spring Boot。我的代码中有一个错误,上面写着
创建文件[E:\Programming\Java\boot\Project1\target\classes\com\example\demo\alien.class]中定义的名为“alien”的bean时出错:bean实例化失败;嵌套异常是org.springframework.bean。BeanInstationException:未能实例化[com.example.demo.Alien]:构造函数引发异常;嵌套异常是java.lang.NullPointerException:无法调用“com.example.demo.Laptop.compile(),因为“this.laptp”为空
下面是我的代码
主类
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class Project1Application {
public static void main(String[] args) {
ConfigurableApplicationContext context= SpringApplication.run(Project1Application.class, args);
Alien a=context.getBean(Alien.class);
a.show();
}
}
外星类
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
public class Alien {
private int id;
private String name;
private String tech;
@Autowired
private Laptop laptop;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTech() {
return tech;
}
public void setTech(String tech) {
this.tech = tech;
}
public void show() {
System.out.println("in show..........");
}
public Alien() {
super();
System.out.println("Object Created......");
laptop.compile();
}
}
笔记本电脑类
package com.example.demo;
import org.springframework.stereotype.Component;
@Component
public class Laptop {
private int lid;
private String brand;
@Override
public String toString() {
return "Laptop [lid=" + lid + ", brand=" + brand + "]";
}
public int getLid() {
return lid;
}
public void setLid(int lid) {
this.lid = lid;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public void compile() {
System.out.println("Compiling..");
}
}
问题是您在< code>Alien的构造函数中调用了< code>laptop.compile()。当时Spring还没有注入< code>Laptop bean,所以< code>this.laptop为< code>null。
有几种方法可以解决这个问题。
首先,您可以移动<code>笔记本电脑。compile()到一个单独的方法,用@PostConstruct
。例如:
@Component
public class Alien {
private int id;
private String name;
private String tech;
@Autowired
private Laptop laptop;
// Getters + Setters
public void show() {
System.out.println("in show..........");
}
// Add this method
@PostConstruct
public void initialize() {
laptop.compile();
}
public Alien() {
super();
System.out.println("Object Created......");
}
}
或者,您可以将现场注入替换为构造函数注入:
@Component
public class Alien {
private int id;
private String name;
private String tech;
private Laptop laptop; // Remove @Autowired
// Getters + Setters
public void show() {
System.out.println("in show..........");
}
@Autowired // Put @Autowired here
public Alien(Laptop laptop) {
super();
this.laptop = laptop;
System.out.println("Object Created......");
this.laptop.compile();
}
}
如今,构造函数注入是注入beans的首选方式,因此这将是一个可行的解决方案。注意,尽管我在构造函数的顶部添加了< code>@Autowired注释,但是如果这是唯一的构造函数,就没有必要了。
我正在尝试找到一种简单的方法(使用C 11之前,即没有)来记录模板对类型的哪些要求才能正常工作。也许有更好的方法可以做到这一点。但是,这是我的问题: 为什么是
我正在将一个应用程序从Websphere迁移到jboss EAP 6.0。我已经在Jboss控制台上创建了数据源。但在我的代码中,我是这样引用的: 但是当从Jboss点击应用程序时,它会给出以下错误: 致命的http-/135.155.175.224:8080-1数据库连接。DBAccess-getDatasource():严重错误:JDBC命名服务异常:JBAS011843:实例化Initial
我已经容器化了一个Spring引导应用程序。它包含在一个jar文件中。当我单独调用jar文件时,它正在工作,但是当我通过运行它时,它会产生以下错误: ConfigServletWebServerApplicationContext:上下文初始化期间遇到异常-取消刷新尝试:org。springframework。豆。工厂UnsatisfiedPendencyException:创建名为“crawle
我正在尝试使用Python Splinter Selenium PhantomJS进行基本测试,但我无法启动phantomjs浏览器。(Chrome 我得到一个错误: 此外,当我跑步时: 我基本上得到了同样的错误。 看起来PhantomJS正在使用远程驱动程序连接到远程服务器,但splinter没有启动selenium(?)PhantomJS要连接到的服务器。我不介意进入splinter(?)的源
假设你有一个绘制了很多模型的场景,而大部分的模型包含的是同一组顶点数据,只不过进行的是不同的世界空间变换。想象一个充满草的场景:每根草都是一个包含几个三角形的小模型。你可能会需要绘制很多根草,最终在每帧中你可能会需要渲染上千或者上万根草。因为每一根草仅仅是由几个三角形构成,渲染几乎是瞬间完成的,但上千个渲染函数调用却会极大地影响性能。 如果我们需要渲染大量物体时,代码看起来会像这样: for(un
我试图让公共资源日志为log4j配置工作,但是当启动服务器时,我总是得到一个异常。当试图使用StringUtils时,我也会得到一个类似的异常,它可以通过另一个公共资源库获得。 pom依赖项: