【Spring】学习笔记001--IoC创建对象的方式

  Spring注册bean的方式根据实体类内部的有参、无参,有如下方式:

1.无参构造

  Spring注册bean的方式默认是基于无参构造方法的,而我们知道,对于一个实体类,Java是默认存在无参构造方法的,因此在注册bean时,我们可以直接将bean注册进容器。

  例如实体类如下:

public class User implements Serializable {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }
}
<bean id="userBean" class="com.aircl.domain.User">
    <property name="name" value="aircl"></property>
</bean>
@Test
public void testUser(){
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    User userBean = (User) context.getBean("userBean");
    System.out.println(userBean.getName());
}

2.有参构造

  Spring对于内部含有有参构造方法的实体类来说,有三种注册方式,当然,实体类中不能够再有无参构造方法,只能够存在有参构造方法,如下:

public class User implements Serializable {
    private String name;

    public User(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }
}
    <!--第一种方式:根据下标,下标对应属性在实体类中的顺序-->
    <bean id="userBean" class="com.aircl.domain.User">
        <constructor-arg index="0" value="aircl"></constructor-arg>
    </bean>

    <!--第二种方式:根据类型,但是这种方式存在问题,容易混淆-->
    <bean id="userBean" class="com.aircl.domain.User">
        <constructor-arg type="java.lang.String" value="aircl"></constructor-arg>
    </bean>

    <!--第三种方式:根据类型,推荐使用这种方式-->
    <bean id="userBean" class="com.aircl.domain.User">
        <constructor-arg name="name" value="aircl"></constructor-arg>
    </bean>

总结

  在配置文件加载的时候,容器中管理的对象就已经初始化了。

posted @ 2021-01-30 21:15  AirCL  阅读(60)  评论(0编辑  收藏  举报