我在注射课时遇到问题。
在我的配置中,我有一个设置登录级别的类,然后是一个设置级别的变量:
<bean id="config" class="..." init-method="init">
<property name="log4jConfig" ref="log4j" />
<property name="levelLogging" value="9" />
</bean>
和代码:
public void setlevelLogging(Integer level) {
if (level == null) {
set0();
} else {
switch (level) {
case 0:
set0();
break;
case 9:
set9();
}
}
this.level = level;
}
private void set0() {
log4jConfig.setLoggerLevel("org.springframework.ws.server.MessageTracing", "OFF");
log4jConfig.setLoggerLevel("org.app", "INFO");
log4jConfig.setLoggerLevel("org.springframework.ws.client.MessageTracing", "OFF");
}
public void setLog4jConfig(Log4jConfigJmx log4jConfig) {
this.log4jConfig = log4jConfig;
}
当我想运行这段代码时,我得到了 NPE,因为setlevelLogging
调用时 log4jConfig 为空。
我该如何解决这个异常?
现在我从属性中排除这个类并在 configClass 中创建新类:
Log4jConfigJmx log4jConfig = new Log4jConfigJmx()
但我不认为这是个好主意
编辑:
我尝试下面的示例,但我仍然有一些问题:
首先我得到了这个例外:
[ERROR] java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given
因为我使用的是事务性和 AOP,所以我将默认构造函数添加到类中,所以我有两个:
public Config() {
}
public Config(Log4jConfigJmx log4jConfig, Integer level) {
this.log4jConfig = log4jConfig;
setlevelLoggin(level);
}
设置级别记录...
<bean id="config" class="..." init-method="init">
<constructor-arg index="0" ref="log4j" />
<constructor-arg index="1" value="9" />
</bean>
但现在我还有 NPE
请帮忙