基于XML配置文件对Bean的管理操作

在 Spring 中,IOC(Inversion of Control)容器负责对象的创建和管理,通过将对象的创建和依赖关系的管理从应用程序代码中分离出来,实现了解耦和灵活性。

一、IOC操作Bean管理

  1. 什么是Bean管理: Bean管理是指 Spring 容器创建对象并进行属性注入的过程。通过 IOC,Spring 容器负责创建对象、注入属性,从而实现对象的依赖关系和生命周期的管理。
  2. Bean管理操作: Bean管理的操作涉及对象的创建和属性注入。可以通过基于XML配置文件或基于注解的方式来实现。

二、基于XML配置文件

  1. 创建对象: 首先,创建要实例化的类,确保它具有相应的属性和构造函数。
  2. 创建XML配置文件: 创建一个XML配置文件,比如 applicationContext.xml,用于配置对象和它们的依赖关系。

  3. 定义Bean: 在配置文件中,使用 <bean> 元素定义对象(Bean)。设置 id 属性来唯一标识每个对象,使用 class 属性指定对象的类路径。

    <bean id="myBean" class="com.example.MyBean"></bean>

    注意:创建对象默认会执行无参构造方法。

  4. 注入属性:
    • 使用 Setter 方法进行注入:

      a. 创建类:创建一个类,包含要注入的属性,并提供相应的 setter 方法。

      public class MyBean {
          private String name;
          
          public void setName(String name) {
              this.name = name;
          }
          
          public String getName() {
              return name;
          }
          
      }
      

      b. 创建XML配置文件:创建配置文件,配置对象的创建和属性注入。

      c. 定义Bean:在配置文件中,使用 <bean> 元素定义对象,并使用 <property> 元素注入属性。

      <bean id="myBean" class="com.example.MyBean">
          <!-- 使用 <property> 元素注入属性 -->
          <property name="name" value="jack"></property>
      </bean>
      

      d. 获取Spring容器:在代码中,获取 Spring 容器,并使用 getBean() 方法获取注入了属性的对象。

      ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
      MyBean myBean = (MyBean) context.getBean("myBean");
      

    • 使用有参构造方法进行注入:

      a. 创建类:创建一个类,包含要注入的属性,并提供带有参数的构造方法。

      public class MyBean {
          private String name;
          
          public MyBean(String name) {
              this.name = name;
          }
          
          public String getName() {
              return name;
          }
          
      }
      

      b. 创建XML配置文件:创建配置文件,配置对象的创建和属性注入。

      c. 定义Bean:在配置文件中,使用 <bean> 元素定义对象,并使用 <constructor-arg> 元素注入构造方法的参数。

      <bean id="myBean" class="com.example.MyBean">
          <!-- 使用 <constructor-arg> 元素来注入构造方法的参数 -->
      <constructor-arg name=”name”  value="John" />
      <!--	
              <constructor-arg index=”0”  value="John" />
              (name属性赋值的属性名,index是构造参数的位置)
        -->
      
      </bean>
      

      d. 获取Spring容器:在代码中,获取 Spring 容器,并使用 getBean() 方法获取注入了参数的对象。

      ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
      MyBean myBean = (MyBean) context.getBean("myBean");
      

  5. XML注入其他类型属性:
    • 注入null值:
      <bean id="myBean" class="com.example.MyBean">
          <property name="myProperty">
              <null/>
          </property>
      </bean>
      
    • 特殊字符:

      使用 <![CDATA[ ... ]]> 来定义一个 CDATA 块,原样保留特殊字符。

      <property name="address">
          <value>
              <![CDATA[<南京>]]>
          </value>
      </property>
      
    • 外部bean:

      <bean id="user" class="com.example.User">
          <property name="username" value="john" />
      </bean>
      
      <bean id="order" class="com.example.Order">
          <property name="user" ref="user" />
      </bean>
      
    • 内部bean:
      <bean id="outerBean" class="com.example.OuterBean">
          <property name="innerBean">
              <bean class="com.example.InnerBean">
                  <property name="value" value="Inner Bean Value" />
              </bean>
          </property>
      </bean>
      
    • 集合类型:

      注入数组、List、Set 和 Map。

      1. 注入数组:

      <bean id="myBean" class="com.example.MyBean">
          <property name="intArray">
              <array>
                  <value>1</value>
                  <value>2</value>
                  <value>3</value>
              </array>
          </property>
      </bean>
      

      2. 注入List:

      <bean id="myBean" class="com.example.MyBean">
          <property name="stringList">
              <list>
                  <value>Value 1</value>
                  <value>Value 2</value>
                  <value>Value 3</value>
              </list>
          </property>
      </bean>
      

      3. 注入Set:

      <bean id="myBean" class="com.example.MyBean">
          <property name="stringSet">
              <set>
                  <value>Value A</value>
                  <value>Value B</value>
                  <value>Value C</value>
              </set>
          </property>
      </bean>
      

      4. 注入Map:

      <bean id="myBean" class="com.example.MyBean">
          <property name="stringMap">
              <map>
                  <entry key="Key 1" value="Value X" />
                  <entry key="Key 2" value="Value Y" />
                  <entry key="Key 3" value="Value Z" />
              </map>
          </property>
      </bean>

      5.集合中设置对象类型值(List)

      <bean id="address1" class="com.example.Address">
          <property name="city" value="New York" />
          <property name="state" value="NY" />
      </bean>
      
      <bean id="address2" class="com.example.Address">
          <property name="city" value="Los Angeles" />
          <property name="state" value="CA" />
      </bean>
      
      <bean id="user" class="com.example.User">
          <property name="username" value="john.doe" />
          <property name="addresses">
              <list>
                  <ref bean="address1" />
                  <ref bean="address2" />
              </list>
          </property>
      </bean>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值