[英]Spring Setter Injection on shadowed fields
我想在变量的子类中对变量进行阴影处理并将其类型从布尔值更改为字符串。 然而,二传手注射失败。 我知道使用阴影是不好的做法,但是我想知道是否有可能以及如何做。
我想做的例子:
public class A {
public boolean field;
@SuppressWarnings("javadoc")
public boolean isField() {
return field;
}
@SuppressWarnings("javadoc")
public void setField(boolean field) {
this.field = field;
}
}
我想在子类中将属性“字段”隐藏为字符串。
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注入不起作用:
org.springframework.beans.TypeMismatchException:无法将类型[java.lang.String]的属性值转换为属性“字段”的必需类型[boolean]
<bean id="exampleBean" class="B" >
<property name="field" value="value"/>
</bean>
虽然我还没有测试。 但是您可以尝试以下方式。
<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定义继承文档。
我已经为您使用的阴影字段测试了示例。 您还必须为父类配置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>
产量
注意 -
仅当在父bean
传递boolean
值以外的任何其他值时,您才会获得以下异常。 在您的情况下,您的子类字段的数据类型与注入的Bean值匹配,但是您还必须为父类也配置一个bean
。 简而言之,这就是在Inheritance
.-的情况下Dependency Injection
。
Caused by: org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.lang.String' to required type 'boolean' for property 'message';
让我知道是否有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.