Loading

spring ioc(使用xml配置)|bean标签及其子标签

Bean标签的属性

  • id: 给对象在容器中提供一个唯一标识。用于获取对象。

  • class: 指定类的全限定类名。用于反射创建对象。默认情况下调用无参构造函数。

  • scope: 指定对象的作用范围。

    • singleton :默认值,单例的.
      单例模式的bean对象生命周期与容器相同,容器创建的时候,对象就跟着创建了

    • prototype :多例的.
      当使用对象时,创建新的对象实例。只要对象在使用中,就一直活着。当对象长时间不用时,被 java 的垃圾回收器回收了。

    • request :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中.

    • session :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中.

  • init-method: 指定类中的初始化方法名称。

  • destroy-method: 指定类中销毁方法名称

实例化bean的三种方式

方式1: Spring 使用默认无参构造函数

<bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"/>

方式2: Spring 管理静态工厂-使用静态工厂的方法创建对象

  • id 属性: 指定 bean 的 id,用于从容器中获取
  • class 属性: 指定静态工厂的全限定类名
  • factory-method 属性: 指定生产对象的静态方法
<bean 
	id="accountService"
	class="com.itheima.factory.StaticFactory"
	factory-method="createAccountService">
</bean>

方式3: spring 管理实例工厂-使用实例工厂的方法创建对象

  • factory-bean 属性: 用于指定实例工厂 bean 的 id。
  • factory-method 属性: 用于指定实例工厂中创建对象的方法
<bean id="instanceFactory" class="com.itheima.factory.InstanceFactory"></bean>
<bean id="accountService"
      factory-bean="instanceFactory"
      factory-method="createAccountService">
</bean>

子标签(用于依赖注入)

就是给bean对象注入其成员变量

使用构造函数方式 注入 | constructor-arg标签

前提是要有有根据配置的参数所对应的构造函数才能使用

  • 属性
    index:指定参数在构造函数参数列表的索引位置
    type:指定参数在构造函数中的数据类型
    name:指定参数在构造函数中的名称 用这个找给谁赋值
    ========上面三个都是赋值给谁,下面两个指的是赋什么值的========
    value:它能赋的值是基本数据类型和 String 类型
    ref:它能赋的值是其他 bean 类型,也就是说,必须得是在配置文件中配置过的 bean 
    
  • eg
     <constructor-arg name="name" value="zhang3"></constructor-arg>
    

使用set方法方式 注入 | property标签

  • 属性
    • name: 找的是类中 set 方法后面的部分
    • value: 给属性赋值是基本数据类型和 string 类型的
    • ref: 给属性赋值是其他 bean 类型的
  • eg
    <property name="name" value="lisi"></property>
    

注入集合属性

注入集合数据, 在注入集合数据时,只要结构相同,标签可以互换

  • List 结构的:array,list,set
  • Map 结构的: map,entry; props,prop

eg:

  • pojo
    public class A {
        private String[] myStrs;
        private List<String> myList;
        private Set<String> mySet;
        private Map<String,String> myMap;
        private Properties myProps;
        
        public void setMyStrs(String[] myStrs) 
        	this.myStrs = myStrs;
        }
        public void setMyList(List<String> myList) {
        	this.myList = myList;
        }
        public void setMySet(Set<String> mySet) {
        	this.mySet = mySet;
        }
        public void setMyMap(Map<String, String> myMap) {
        	this.myMap = myMap;
        }
        public void setMyProps(Properties myProps) {
        	this.myProps = myProps;
        }
    }
    
  • xml文件
    <bean id="a" class="com.kehao.A">
        <!--数组-->
        <property name="myStrs">
            <array>
                <value>aaa</value>
                <value>bbb</value>
                <value>ccc</value>
            </array>
        </property>
        <!--list集合-->
        <property name="myList">
            <list>
                <value>javase</value>
                <value>mysql</value>
                <value>javaweb</value>
            </list>
        </property>
        <!--set集合-->
        <property name="mySet">
            <set>
                <value>北京</value>
                <value>上海</value>
                <value>南京</value>
            </set>
        </property>
    
        <!--map集合-->
        <property name="myMap">
            <map>
                <entry key="aaa" value="你好"></entry>
                <entry key="bbb" value="hello"></entry>
                <entry key="ccc" value="Hi"></entry>
            </map>
        </property>
        <!--properties集合-->
        <property name="myProps">
            <props>
                <prop key="111">哈哈</prop>
                <prop key="222">嘿嘿</prop>
                <prop key="333">呵呵</prop>
            </props>
        </property>
    </bean>
    </bean>
    
posted @ 2021-04-12 17:16  克豪  阅读(103)  评论(0编辑  收藏  举报