我得到一个空指针异常,而自动布线我的类之一。
我尝试过使用不同的注释,比如@Component
和@ComponentScan
public class ClassA {
public final String str = "String";
public ClassA(){
System.out.println("Class A initiated");
}
}
public class ClassB {
@Autowired
public ClassA classA;
public ClassB(){
System.out.println(classA.str);
}
}
@Configuration
public class Config {
@Bean
public ClassA classA(){
return new ClassA();
}
@Bean
public ClassB classB(){
return new ClassB();
}
}
Stacktrace:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'classB' defined in class path resource [com/test/demo/Config.class]: Bean instantiation via factory method failed;
nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.test.demo.ClassB]: Factory method 'classB' threw exception; nested exception is java.lang.NullPointerException
如果您希望在构造函数本身中提取值,可以使用构造函数注入而不是字段注入,例如:
public class ClassB {
public ClassA classA;
@Autowired
public ClassB(ClassA classA){
this.classA = classA;
System.out.println(classA.str);
}
}
从Spring 4.3开始,具有单个构造函数的类可以省略@autowed
注释。Spring在进行包扫描时会遇到我们的ClassB类,并通过调用带注释的构造函数来初始化它的实例。
在代码中,自动连接发生在调用no args构造函数之后。因此,当您尝试使用classA对象访问“str”时,会导致空指针异常,因为classA尚未自动连接。
构造函数在Spring注入自动连接字段之前运行,因此classA
字段仍然为空。
将代码移到构造函数(和字段初始值设定项)之外,就会看到正确的值。
而不是使用@autowmed。通过ClassB的构造函数注入ClassA。
public class ClassB {
private final ClassA classA;
public ClassB(ClassA classA){
this.classA = classA;
System.out.println(classA.str);
}
然后将ClassB的Bean配置更改为使用ClassA。
指针变量也是变量,是变量就可以任意赋值,不要越界即可(32位编译器指针大小为4字节,64位编译器指针大小为8字节),但是,任意数值赋值给指针变量没有意义,因为这样的指针就成了野指针,此指针指向的区域是未知(操作系统不允许操作此指针指向的内存区域)。所以,野指针不会直接引发错误,操作野指针指向的内存区域才会出问题。 int a = 100; int *p; p = a; //把a的值赋值给指针变量p
问题内容: 我正在学习Spring,在尝试建立一个相对基本的Spring项目时遇到了一些问题。我正在创建一个应用程序以简单地从数据库中读取数据,但是我在自动装配方面遇到问题,或者缺少该问题。我的类在方法中引发了空指针异常,因为尚未初始化变量。有人可以在这里指出正确的方向吗? 应用程序类 CustomerService.class GetCustomerEvent.class 问题答案: 您没有初始
有人可以解释我什么时候使用关键字 throw new 有用.而不是在方法的签名旁边使用抛出? 我知道当方法抛出Checked Exception时。Java迫使我们通过将Exception处理到try-catch块中,或者通过在签名旁边的关键字throws指定将在其他地方完成,从而直接在方法中处理它。 然而,我很难理解何时使用关键字throw new是有用的,以及为什么。它与处理未选中的异常有关吗
问题内容: 我正在尝试启动一个IntentService。当我这样做时,它会吐出: 我已经用谷歌搜索过,并查看了尽可能多的类似StackOverflow问题。但是,有一些细微的区别,我无法解决。首先,没有任何异常引用我的类。其次,通过更改上下文或再次检查以确保其不为null来解决类似的问题。 我有代码来检查情况并非如此: 我的IntentService是根据Google文档建模的。只是一个带有on
我在活动onCreate()中初始化列表,如下所示: 编辑:我的活动的launchmode是SingleTask 编辑2: 我无法发送更多有用的日志,因为这次崩溃是在生产中。我只有一些布料日志。 谢谢你的帮助,但我不能粘贴整个代码,因为隐私。 我想我在SingleTask-OnCreate-OnNewIntent用法上有问题。简单地说,我试图打开我的应用程序从通知与参数决定哪个片段将打开时,用户导
本文向大家介绍Java自动拆箱空指针异常的解决,包括了Java自动拆箱空指针异常的解决的使用技巧和注意事项,需要的朋友参考一下 公司搬迁,临时充当装修工,提前两个小时到公司忙着拆卸设备。结果接到客户反映,某部分功能偶尔不能用。于是参与救火,与写这段代码的小伙伴一起排查原因。 最终发现导致业务偶尔不能使用是由Long类型自动拆箱导致空指针异常引起的。下面就带大家分析一下Java中基础类型的包装类在拆