我正在尝试使用Annotations连接bean。当beans.xml配置文件中没有bean时,我得到一个空指针异常..我希望required = false属性来解决这个问题..是公平的期望?如果是这样,为什么它仍然会抛出异常,即使我将缺少的bean设置为false ...
package com.rajkumar.spring;
import org.springframework.beans.factory.annotation.Autowired;
public class Log {
private ConsoleWriter consoleWriter;
private FileWriter fileWriter;
@Autowired
public void setConsoleWriter(ConsoleWriter consoleWriter) {
this.consoleWriter = consoleWriter;
}
@Autowired(required=false)
public void setFileWriter(FileWriter fileWriter) {
this.fileWriter = fileWriter;
}
public void writeToFile(String message) {
fileWriter.write(message); // this is throwing the error as the bean is comments in the XML file..
}
public void writeToConsole(String message) {
consoleWriter.write(message);
}
}
My Beans.xml位于下方..
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<bean id="log" class="com.rajkumar.spring.Log"></bean>
<bean id="consoleWriter"
class="com.rajkumar.spring.ConsoleWriter">
</bean>
<!-- <bean id="fileWriter" class="com.rajkumar.spring.FileWriter"></bean> -->
<context:annotation-config></context:annotation-config>
</beans>
答案 0 :(得分:0)
required=false
只是使spring容器依赖项检查可选,并且它避免了相应的bean找不到异常,例如.. 需要一个类型为&#39; com.rajkumar.spring.FileWriter&#39;的bean。无法找到。
请注意,此处注入的对象仍为null
,因此您看到NullPointerException
。
希望这会对你有所帮助。
答案 1 :(得分:0)
尝试在类定义上方添加@Component Annotation。
private void button1_Click(object sender, EventArgs e)
{
listBox1.Items.Add("NextStation: " + textBox1.Text);
listBox1.Items.Add("Station: " +textBox1.Text);
}
如果没有Spring,你将无法识别你的类在某处注入某些东西,你的字段将保持为空。您可能还想将ComponentScan添加到您的配置中。
答案 2 :(得分:-1)
public void writeToFile(String message) {
fileWriter.write(message); // this is throwing the error as the bean is comments in the XML file..
}
错误正在抛出,因为如果不注入bean,则没有向fileWriter
注入bean,然后在使用之前尝试验证对象是否为null。
public void writeToFile(String message) {
if (fileWriter!=null)
fileWriter.write(message); // this is throwing the error as the bean is comments in the XML file..
}
另一种方法是使用@PostConstruct
,例如:
@PostConstruct
public void initBean(){
if (fileWriter ==null) fileWriter = new SomeFileWriter();
}
在这种情况下,无需在fileWriter
方法
writeToFile
您也可以使用init方法代替@PostConstruct
像这样:
<bean id="log" class="com.rajkumar.spring.Log" init-method="myInit"></bean>
然后在myInit()
方法上尝试初始化您的null对象。