我想隐藏一个变量,并在其子类中将其类型从布尔值更改为字符串。然而,二传手注射失败了。我知道使用阴影是一种不好的做法,但我想知道它是否可能以及如何。
我想做的例子:
public class A {
public boolean field;
@SuppressWarnings("javadoc")
public boolean isField() {
return field;
}
@SuppressWarnings("javadoc")
public void setField(boolean field) {
this.field = field;
}
}
我想将属性'field'视为子类中的String。
public class B extends A {
private String field;
@SuppressWarnings("javadoc")
public String getField() {
return field;
}
@SuppressWarnings("javadoc")
public void setField(String field) {
this.field = field;
}
}
我得到一个异常,即setter Injection不起作用:
org.springframework.beans.TypeMismatchException:无法将类型[java.lang.String]的属性值转换为属性“field”的必需类型[boolean]
<bean id="exampleBean" class="B" >
<property name="field" value="value"/>
</bean>
答案 0 :(得分:0)
虽然我没有测试过。但您可以尝试以下方式。
<bean id="beanA" class="A">
<property name="field" value="false"></property>
</bean>
<bean id="beanB" parent="beanA" class="B">
<property name="field" value="anyValue"></property>
</bean>
让我知道它是否适合你。
修改 - 强>
请浏览Bean definition inheritance doc。
我已经测试了您正在使用的阴影字段的示例。您还必须为父类配置bean,因为如果您只为子类配置bean,则会在下面获得异常 -
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'helloWorld' is defined
我不知道你要使用所谓的阴影字段来完成什么。但在这里,我创建了一个可以帮助你的工作示例。看看吧。
<强> MainApp.java 强>
package com.example;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String args[]){
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
HelloWorld hw = (HelloWorld) context.getBean("helloWorld");
System.out.println("Is message:" + hw.isMsg());
HelloCountry hc = (HelloCountry) context.getBean("helloCountry");
System.out.println("Message:" + hc.getMessage());
}
}
class HelloWorld {
private boolean message;
public void setMessage(boolean message){
this.message = message;
}
public boolean isMsg(){
return message;
}
}
class HelloCountry extends HelloWorld {
private String message;
public void setMessage(String message){
this.message = message;
}
public String getMessage(){
return message;
}
}
<强>的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"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- A parent class bean must be defined to create its instance -->
<bean id = "helloWorld" class = "com.example.HelloWorld">
<property name = "message" value = "false"/>
</bean>
<bean id = "helloCountry" class = "com.example.HelloCountry">
<property name = "message" value = "Hello Country!!!"/>
</bean>
</beans>
<强>输出强>
注意强> -
只有在父boolean
中传递bean
以外的任何值时,才会收到以下异常。在您的情况下,子类字段的数据类型与注入的bean值匹配,但您必须为父类配置bean
。简而言之,就Dependency Injection
.-
Inheritance
的工作原理
Caused by: org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.lang.String' to required type 'boolean' for property 'message';
如果有帮助,请告诉我。