zoukankan      html  css  js  c++  java
  • spring逐步学习___bean的属性注入方式

    第一种:构造器参数注入

    第二种:setter方法属性注入(setter方法的规范需要符合JavaBean规范)

    第三种:接口注入

    注意:Spring 框架规范中通过配置文件配置的方式.只支持构造器参数注入setter方法属性注入,不支持接口注入 

    测试构造器参数注入:

    新建一个类,生成构造器

     

    //目标,构造器参数注入,new car直接将参数的值直接赋值
    public class Car {
        private Integer id;
        private String name;
        private Double price;
        //有参构造
        public Car(Integer id, String name, Double price) {
            this.id = id;
            this.name = name;
            this.price = price;
        }
        
        //取值要用getter
        public Integer getId(){
            return this.id;
        }
        
        
        public String toString() {
            return "Car [id=" + id + ", name=" + name + ", price=" + price + "]";
        }
    
    }

     

    配置容器中的bean写法:<>

    <!-- 构造器注入属性的值 -->
        <bean id="car" class="com.igeek.xmlpropertydi.Car">
            <!--constructor-arg:告诉spring容器,要调用有参构造方法了,不再调用默认的构造方法了  
            new Car(1,"宝马",99999d)
            参数第一组:定位属性
                * index:根据索引定位属性,0表示第一个位置
                * name:根据属性参数名称定位属性
                * type:根据属性数据类型定位属性
            参数第二组:值
                * value:简单的值,字符串
                * ref:复杂的(由spring容器创建的bean对象)
            -->
            <!-- <constructor-arg index="0" value="1"/> -->
            <constructor-arg index="0" name="id" value="1"/>
            <!-- <constructor-arg name="name" value="宝马1代"/> -->
            <constructor-arg name="name" >
                <value>宝马2代</value>
            </constructor-arg>
            <constructor-arg type="java.lang.Double" value="99999d"/>
        </bean>

    测试构造器生成对象:

    @Test
        public void test(){
            //spring容器
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
            //获取car
            Car car =(Car) applicationContext.getBean("car");
            System.out.println(car);
        }

    测试setXxx方法属性注入property:

    创建Person类,设置属性,setget方法:

    public class Person {
        private Integer id;
        private String name;
        private Car car;
        //必须提供setter属性方法
        public void setId(Integer id) {
            this.id = id;
        }
        public void setName(String name) {
            this.name = name;
        }
        public void setCar(Car car) {
            this.car = car;
        }
        
        @Override
        public String toString() {
            return "Person [id=" + id + ", name=" + name + ", car=" + car + "]";
        }
    
    }

    配置spring容器中的bean写法:------->property

    <!-- setter方法属性注入:调用默认构造器,相当于new Person() -->
    <bean id="person" class="com.igeek.xmlpropertydi.Person">
    <!-- property:专门进行setter属性注入用的标签 。
                * name:setter方法的属性的名字,例如SetXxx-那么name的属性值为xxx。
                * value:简单的值
                * ref:bean的名字,对象的引用
            -->
            <property name="id" value="1001"/>
            <property name="name" value="Tom"/>
            <!-- <property name="car" ref="car"/> --><!--等同于-->
            <property name="car">
                <ref bean="car"/>
            </property>
        </bean>

    测试set注入bean属性:

    @Test
        public void test1(){
            //spring容器
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");        
            //获取人
            Person person=(Person)applicationContext.getBean("person");
            System.out.println(person);
        }

    引入P命名空间:为简化set方法属性依赖注入

    需要引入p名称空间:

    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:p="http://www.springframework.org/schema/p"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd">

    对比   set---->preporty与p命名写法

    <!-- p命名空间写法-->
    <bean id="person2" class="com.igeek.xmlpropertydi.Person" p:id="1002" p:name="关羽" p:car-ref="car"/>
    
    <!-- property写法-->
    <bean id="person" class="com.igeek.xmlpropertydi.Person">
            <!-- 
            property:专门进行setter属性注入用的标签 。
                * name:setter方法的属性的名字,例如SetXxx-那么name的属性值为xxx。
                * value:简单的值
                * ref:bean的名字,对象的引用
            -->
            <property name="id" value="1001"/>
            <property name="name" value="Tom"/>
            <!-- <property name="car" ref="car"/> --><!--等同于-->
            <property name="car">
                <ref bean="car"/>
            </property>
        </bean>

     

  • 相关阅读:
    主线程MainThread与渲染线程RenderThread
    杀死进程的几种方式
    Android App的设计架构:MVC,MVP,MVVM与架构经验谈
    动画完全解析(二):补间动画原理及自定义动画
    SublimeText教程
    JqGrid自定义的列
    js 除法 取整
    js日期字符串增加天数的函数
    Oracle中的rownum和rowid
    jQuery判断对象是否是函数
  • 原文地址:https://www.cnblogs.com/ylblikestudyJava/p/12426822.html
Copyright © 2011-2022 走看看