您不能自动连接所谓的简单属性,例如基元,字符串和类

时间:2018-09-02 11:52:00

标签: java spring

我是Spring的新手,正在寻找详细的知识。我正在阅读有关自动装配的知识,并阅读了You cannot autowire so-called simple properties such as primitives, Strings, and Classes (and arrays of such simple properties) here

1)我不明白Classes在这里是什么意思?

2)他们说您不能自动连接素数,但是我尝试了Integer包装类,但是它们仍然没有用,为什么?请参见下面的代码。

豆类:

<bean id="teacher" class="com.climesoft.webapp.model.Teacher"
        autowire="byName">
</bean>
<bean id="id" class="java.lang.Integer">
            <constructor-arg value="20" />
</bean>

此处的Java类:

public class Teacher {

    private String name;
//  private int id;
    private Integer id; // for autowiring
    private String phone;
    private Course course;


    public Course getCourse() {
        return course;
    }

    public void setCourse(Course course) {
        this.course = course;
    }

    public Teacher() {
        System.out.println("Calling Teacher No Param Constructor");
    }

    public Teacher(String name, Integer id, String phone) {
        this.name = name;
        this.id = id;
        this.phone = phone;

        System.out.println("Calling Teacher Param Constructor");
    }

    public String getName() {
        System.out.println("Calling Teacher getName");
        return name;
    }
    public void setName(String name) {
        System.out.println("Calling Teacher setName");
        this.name = name;
    }
    public Integer getId() {
        System.out.println("Calling Teacher getId");
        return id;
    }
    public void setId(Integer id) {
        System.out.println("Calling Teacher setId");
        this.id = id;
    }
    public String getPhone() {
        System.out.println("Calling Teacher getPhone");
        return phone;
    }
    public void setPhone(String phone) {
        System.out.println("Calling Teacher setPhone");
        this.phone = phone;
    }

    @Override
    public String toString() {
        return "Teacher [name=" + name + ", id=" + id + ", phone=" + phone + ", course=" + course + "]";
    }


}

3 个答案:

答案 0 :(得分:1)

该句子存在一些代名词问题,可能会阻止您正确理解它。

它可能更容易理解,如下所示:

  

您不能自动连接所谓的简单属性,例如基元,   这样的简单属性的字符串和类(和数组)。

无论如何,这实际上意味着任何原语,字符串和原语类(即包装器类(如Integer),原语/字符串/包装器的数组)都不能自动装配。

自动装配从本质上帮助我们连接用户定义的类(当然也定义了框架),而上述所有东西在默认情况下由于涉及的模棱两可可能非常复杂。

答案 1 :(得分:0)

  • 您不能自动连接基本类型,例如(int,boolean,long,short, 字节)和全部。
  • 仅可对Object类(直接或间接)的子类进行自动装配。

因此,基本上,自动装配不算什么,但是您要在依赖类中引用该类的对象(或Bean)。作为int,double,所有这些不是对象而是原始类型的字节都无法自动装配。

但是您可以使用诸如 String Integer Boolean 之类的原始类型的对象对应部分。

>

答案 2 :(得分:-1)

实际上,您可以创建Class类型的bean:

<bean id="myClass" class="java.lang.Class" factory-method="forName">
   <constructor-arg value="com.MyClass"/>
</bean>

您可以自动连接int:

<bean id="autowiredInt" class="java.lang.Integer" factory-method="valueOf">
<constructor-arg value="100"/></bean>

然后:

@Autowired @Qualifier("autowiredInt") 
private int autowiredInt;

或者您可以使用@Value注释。