IOC创建对象方式和Spring配置

90 阅读2分钟

IOC创建对象方式

  1. IOC创建对象的方式,通过实体类的构造器的三种情况进行判断
    • 构造器中为有参构造 -->三种创建方式
    • 构造器中为无参构造 -->一种
    • 构造器中,有参构造和无参构造都有 -->特例分析
  2. 实体类中的构造器中为无参构造

实体类

package pojo;

public class user {
    private String name;

    
    //有参构造和无参构造,自己删减测试
    public user(String name) {
        this.name = name;
    }
    public user() {
        System.out.println("无参构造");
    }

    public String getName() {
        return name;
    }

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

    public void test() {
        System.out.println("name:"+name);
    }
}

beans.xml创建对象:

    <bean id="user" class="pojo.user">
        <property name="name" value="python"/>
    </bean>
  1. 实体类中的构造器中为有参构造

方式一:通过下标赋值

<bean id="user" class="pojo.user">         
    <constructor-arg index="0" value="java"/>  
</bean> 

方式二:通过类型(不推荐使用)

<bean id="user" class="pojo.user">                          
     <constructor-arg type="java.lang.String" value="php"/>   
</bean>                             

方式三:通过参数名

<bean id="user" class="pojo.user">              
     <constructor-arg name="name" value="c++"/>  
</bean>

说明:

  1. 有参构造,通过<constructor-arg>标签来对参数进行解析
  2. 通过下标赋值,index:有参构造的参数,从0开始。value:给对应的参数赋值。如果有参构造有多个参数,就需要多个<constructor-arg>标签,将所有的参数赋值。
  3. 通过类型,需要注意参数的类型,自己可能会看错类型导致错误,不推荐使用。type:参数的类型。value:参数的值
  4. 通过参数名,name:参数的参数名,value:参数的值
  1. 实体类中的构造器中有参构造和无参构造都有:只要你引用了有参构造,无参构造就会被覆盖掉,和java一样。但是如果你没有引用有参构造,就默认是无参构造。

  2. 这里给有多个参数的对象创建吧 实体类:

package pojo;

public class Car {
    private int id;
    private String name;

    public Car(int id, String name) {
        this.id = id;
        this.name = name;
    }


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void showCar(){
        System.out.println("id: "+id);
        System.out.println("name: "+name);
    }
}

beans.xml创建对象 通过下标:

    <bean id="car" class="pojo.Car">
        <constructor-arg index="0" value="1"/>
        <constructor-arg index="1" value="BYD"/>
    </bean>

通过类型:

    <bean id="car" class="pojo.Car">
        <constructor-arg type="int" value="2"/>
        <constructor-arg type="java.lang.String" value="Aston Martin"/>
    </bean>

通过参数名:

    <bean id="car" class="pojo.Car">
        <constructor-arg name="id" value="3"/>
        <constructor-arg name="name" value="Stretch Lincoln Limousine"/>
    </bean>
  1. 在配置文件加载的时候,其中管理的对象都已经初始化了!也就是说,构造器在配置文件加载的时候就已经被初始化了。

Spring配置

  1. 别名

alias 设置别名 , 为bean设置别名,可以设置多个别名,但是这个一般不常用,因为在bean配置中也可以设置别名

<alias name="user" alias="u1"/>
  1. Bean的配置
  1. id 是bean的标识符,要唯一,如果没有配置id,name就是默认标识符
  2. 如果配置id,又配置了name,那么name是别名
  3. name可以设置多个别名,可以用逗号,分号,空格隔开。
  4. class是bean的全限定名=包名+类名
<bean id="car" name="car1 car2,car3;car4" class="pojo.Car">
   <property name="id" value="1"/>
   <property name="name" value="BYD"/>
</bean>
  1. import

import通常在一个团队中使用,可以把你们团队中的所有人写的beans.xml文件整合在一起使用

<!--将三个beans.xml整合起来-->
<import resource="beans1.xml"/>
<import resource="beans2.xml"/>
<import resource="beans3.xml"/>