IOC操作Bean管理(基于xml)

IOC操作Bean管理(基于xml)

1. 什么是Bean管理

  • Bean管理指的是两个操作
  • Spring创建对象
  • Spring注入属性

2. 创建对象

<bean id="dao" class="com.zyy.UserDao"></bean>
  • 在spring配置文件中,使用bean标签,标签里添加对应的属性,就可以实现对象创建
  • 在bean标签有很多属性
    • id:唯一标识
    • class:类全路径(包类路径)
  • 创建对象时,默认也是执行无参数构造方法完成对象创建

3. 注入属性

  • DI:依赖注入,就是注入属性

1. 使用set方法注入

  1. 创建类,定义属性和对应的set方法

    public class Book {
        private String bname;
        private String bauthor;
    
        public void setBname(String bname) {
            this.bname = bname;
        }
    
        public void setBauthor(String bauthor) {
            this.bauthor = bauthor;
        }
    
        public void testDemo(){
            System.out.println(bname + "::" + bauthor);
        }
    }
    
  2. 在spring配置文件配置对象创建,配置属性注入

    <bean id="book" class="com.zyy.sprinf5.Book">
    	<property name="bname" value="123" />
    	<property name="bauthor" value="zyy" />
    </bean>
    

2. 有参构造进行注入

  1. 创建类,定义属性,创建属性对应有参构造方法

    public class Order {
        public String oname;
        public String address;
    
        public Order(String oname, String address) {
            this.oname = oname;
            this.address = address;
        }
    }
    
  2. 在spring配置文件中配置

    <bean id="order" class="com.zyy.spring_demo.Order">
            <constructor-arg name="oname" value="compucter"></constructor-arg>
            <constructor-arg name="address" value="china"></constructor-arg>
        </bean>
    

3. p空间名称注入(了解):使用p名称空间注入,可以简化基于xml配置方式

  1. 添加p名称空间在配置文件中

    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:p="http://www.springframework.org/schema/p"
    
  2. 进行属性注入,在bean标签里面进行操作

    <bean id="book" class="com.zyy.spring_demo.Book" p:bname="how to learn" p:bauthor="zyy"></bean>
    

4. xml其他类型属性注入

  • 字面量

    • null值

      <property name="address">
      	<null/>
      </property>
      
    • 属性值包含特殊符号

      <!--属性值包含特殊符号
      	1 把<>转义为&lt; &gt;
      	2 把带特殊符号的内容写到CDATA
      -->
      <property name="address">
      	<value><![CDATA[<<newyork>>]]></value>
      </property>
      
  • 注入属性-外部bean

    1. 创建两个类service和dao类

    2. 在service调用dao里面的方法

    3. 在spring配置文件中进行配置

      public class UserService{
          //创建UserDao类型属性,生成set方法
          private UserDao userDao;
          public void setUserDao(UserDao userDao){
              this.userDao = userDao;
          }
          public void add(){
              System.out.println("service add.....");
              userDao.update();
          }
      }
      
      <bean id="userService" class="com.zyy.springDemo.service.UserService">
          <!--
      	注入userDao对象
      	name:属性名称
      	ref:创建userDao对象bean标签id值
      -->
          <property name="userDao"  ref="userDaoImpl"></property>
      </bean>
      <bean id="userDaoImpl" class="com.zyy.springDemo.dao.UserDaoImpl"></bean>
      
  • 内部bean与级联赋值

    • 对多关系:部门和员工。一个部门有多个员工,一个员工属于一个部门。部门是一,员工是多。

    • 在实体类之间表示一-对多关系,员工表示所属部门,使用对象类型属性进行表示

      public class Dept {
          private String dname;
      
          public void setDname(String dname) {
              this.dname = dname;
          }
      
          @Override
          public String toString() {
              return "Dept{" +
                      "dname='" + dname + '\'' +
                      '}';
          }
      }
      
      public class Emp {
          private String ename;
          private String gender;
          //员工属于某一部门,适用对象形式表示
          private Dept dept;
      
          public void setDept(Dept dept) {
              this.dept = dept;
          }
      
          public void setEname(String ename) {
              this.ename = ename;
          }
      
          public void setGender(String gender) {
              this.gender = gender;
          }
      
          public void testDemo(){
              System.out.println(ename + "::" + gender + "::" + dept.toString());
          }
      }
      
      <!--内部bean-->
      <bean id="emp" class="com.zyy.spring_demo.Emp">
      <!--        设置两个普通属性-->
              <property name="ename" value="bob"/>
              <property name="gender" value="M"/>
      <!--        设置对象属性-->
              <property name="dept">
                  <bean id="dpt" class="com.zyy.spring_demo.Dept">
                      <property name="dname" value="安保部"/>
                  </bean>
              </property>
          </bean>
      
      <!--级联赋值-->
      <!--第一种写法-->
      <bean id="emp" class="com.zyy.spring_demo.Emp">
      <!--        设置两个普通属性-->
              <property name="ename" value="bob"/>
              <property name="gender" value="M"/>
      <!--        设置对象属性-->
              <property name="dept" ref="dpt"/>
          </bean>
          <bean id="dpt" class="com.zyy.spring_demo.Dept">
              <property name="dname" value="安保部"/>
          </bean>
      <!--第二种写法-->
      <!--不过要在Emp类中先声名dept的get方法-->
      <bean id="emp" class="com.zyy.spring_demo.Emp">
      <!--        设置两个普通属性-->
              <property name="ename" value="bob"/>
              <property name="gender" value="M"/>
      <!--        设置对象属性-->
              <property name="dept.dame" value="安保部"/>
          </bean>
      

5. XML注入集合属性

1. 注入数组、List集合、Map集合类型属性

  1. 创建类,定义数组、list、 map、set类型属性,生成对应set方法

    public class Stu {
        public String[] str;
        public List<String> list;
        public Map<String, String> map;
        public Set<String> set;
    
        public void setStr(String[] str) {
            this.str = str;
        }
    
        public void setList(List<String> list) {
            this.list = list;
        }
    
        public void setMap(Map<String, String> map) {
            this.map = map;
        }
    
        public void setSet(Set<String> set) {
            this.set = set;
        }
        public void test(){
            System.out.println(Arrays.toString(str));
            System.out.println(list);
            System.out.println(map);
            System.out.println(set);
        }
    }
    
  2. 在spring配置文件进行配置

        <bean id="stu" class="com.zyy.spring_demo.Stu">
    <!--        数组类型注入-->
            <property name="str">
                <array>
                    <value>123</value>
                    <value>123</value>
                </array>
            </property>
    <!--        列表类型注入-->
            <property name="list">
                <list>
                    <value>456</value>
                    <value>456</value>
                </list>
            </property>
    <!--        map类型注入-->
            <property name="map">
                <map>
                    <entry key="qwe" value="qwe"></entry>
                    <entry key="zxc" value="zxc"></entry>
                </map>
            </property>
    <!--        set类型注入-->
            <property name="set">
                <set>
                    <value>789</value>
                    <value>111</value>
                </set>
            </property>
        </bean>
    

2. 在集合里面设置对象类型值

  • stu类中有List属性,Course为对象

  • 在spring配置文件中配置

        <bean id="stu" class="com.zyy.spring_demo.Stu">
            <property name="courseList">
                <list>
                    <ref bean="course1"></ref>
                    <ref bean="course2"></ref>
                </list>
            </property>
        </bean>
        <bean id="course1" class="com.zyy.spring_demo.Course">
            <property name="cname" value="123"/>
        </bean>
        <bean id="course2" class="com.zyy.spring_demo.Course">
            <property name="cname" value="456"/>
        </bean>
    

3. 把集合注入部分提取出来作为公共部分

  1. 在spring配置文件中添加名称空间util

    xmlns:util="http://www.springframework.org/schema/util"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
    
  2. 使用util标签完成list集合注入提取

    <util:list id="bookList" >
    	<value>易筋经</value>
    	<value>九阴真经</value>
    	<value>九阳神功</value>
    </util:list>
    
  3. 注入使用

    <bean id="book" class="com.zyy.spring_demo.Book>
    	<property name="list" ref= "bookList"></property〉
    </bean
    
    
posted @ 2021-10-29 21:18  HandsomeToDeath  阅读(51)  评论(0)    收藏  举报