繁体   English   中英

在有阴影的字段上进行Spring Setter注入

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM