zoukankan      html  css  js  c++  java
  • IOC容器-实例化Bean、注入的4种配置方式(无注解方式)

    有java类

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Addr {
        private String addr;
    }
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {
        private String name;
        private Integer age;
       private Addr addr; //地址信息
    }

    第一种:基于Get/Set 框架使用反射创建对象,通过配置的class全限定名

    <!-- get set-->
    <bean id="UserInfo" class="com.spring.domain.User">
         <property name="name" value="孙旺"></property>
         <property name="age" value="18"></property>
         <property name="addr" ref="AddrInfo"></property>
    </bean>
    <bean id="AddrInfo" class="com.spring.domain.Addr">
        <property name="addr" value="中国山东"></property>
    </bean>
    property 标签为实体中的属性
      -- name 属性为实体属性的变量名
      -- value 属性为属性的值
      -- ref 当注入属性为对象时使用ref注入

    第二种:使用静态工厂方法创建对象

    工厂类

    public class BeanFactory {
        public static User getUser() { return new User("小王", 19, new Addr("中国山东")); } 
    }

    此工静态工厂类的方法必须为static静态

    <bean id="UserInfo2" class="com.spring.factory.BeanFactory" factory-method="getUser"></bean>
    factory-method -- 静态工厂中,创建对象的方法
    class -- 静态工厂的类的全限定名称

    第三种:使用实例工厂方法创建对象

    public class BeansFactory {
        public User getUser() {
            return new User("小王", 19, new Addr("中国山东"));
        }
    }
    <bean id="UserFactory" class="com.spring.factory.BeansFactory"></bean>
    <bean id="UserInfo3" factory-bean="UserFactory" factory-method="getUser"></bean>
    factory-bean -- 属性: 设置实例工厂对象的引用
    factory-method -- 属性 : 设置实例工厂对象的方法,用于创建对象

    第四种:构造函数注入<constructor-arg>

    <!--基于 构造方法-->
    <bean id="BeanUser" class="com.spring.domain.UserBean">
       <constructor-arg name="name" value="小孙"></constructor-arg>
       <constructor-arg name="age" value="9"></constructor-arg>
       <constructor-arg name="list">
           <array>
              <value>s1</value>
              <value>s2</value>
          </array>
       </constructor-arg>
    </bean>

    扩展 

    上面根据构造注入时注入了一个list,下面扩展

    get/set 方法的复杂类型注入(构造注入时相同)

    可以注入任意的数据类型:

    • 基本数据类型及其包装类

    • 引用数据类型【所有写得类】枚举、数组、集合【Map、List、Set】

    @Data
    public class NewUser {
        //引用数据类型
        private Addr addr;
    
        //声明成员变量
        private String name;
        private String age;
    
        //多种数据类型成员变量
        private String[] myStrs;//数组
        private List<String> myList;//list集合
        private Set<String> mySet;//set集合
        private Map<String,String> myMap;//map
    }
        <!--复杂映射-->
        <bean id="NewUser" class="com.spring.domain.NewUser">
            <property name="addr" ref="newUserAddr"></property>
            <property name="name" value="小溪西"></property>
            <property name="age" value="99"></property>
            <!--list-->
            <property name="myList">
                <array>
                    <value>list1</value>
                    <value>list2</value>
                </array>
            </property>
            <!-- map -->
            <property name="myMap">
                <map>
                    <entry key="k1" value="v1"></entry>
                    <entry key="k2" value="v2"></entry>
                </map>
            </property>
            <!-- set -->
            <property name="mySet">
                <set>
                    <value>s1</value>
                    <value>s2</value>
                </set>
            </property>
            <!-- arr[] -->
            <property name="myStrs">
                <array>
                    <value>[]1</value>
                    <value>[]2</value>
                </array>
            </property>
        </bean>
        <bean id="newUserAddr" class="com.spring.domain.Addr">
            <property name="addr" value="中国西藏"></property>
        </bean>
  • 相关阅读:
    [PHP]解决PHP Call to undefined function ldap_connect()
    [Nginx] Nginx配置PHP应用传递PATH_INFO变量
    [PHP]解决PHP Fatal error: Call to undefined function mcrypt_get_iv_size()
    [CentOS] centos下安装最新稳定版nginx
    [CentOS]查看centos的发行版本情况
    [MySQL]创建用户并指定某一数据库权限
    [PHP] 安装memcached扩展
    [http]301和302的区别
    [javascript] 报错SecurityError: Failed to read the 'localStorage' property from 'Window': Access is denied for this document.
    [GO项目]开源免费在线客服系统-真正免费开源-GOFLY0.3.5发布-极简强大Go语言开发WEB网页客服
  • 原文地址:https://www.cnblogs.com/xiaozhang666/p/13619711.html
Copyright © 2011-2022 走看看