day38 11-Spring的Bean的属性的注入:对象属性

package cn.itcast.spring3.demo5;

public class Person {
     private String name;//人的名字
     private Car2 car2;//和有一辆车
    public void setName(String name) {
        this.name = name;
    }

    public void setCar2(Car2 car2) {
        this.car2 = car2;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", car2=" + car2 + "]";
    }

/*    public String getName() {
        return name;
    }

    public Car2 getCar2() {
        return car2;
    }
     */
}
package cn.itcast.spring3.demo5;

public class Car2 {
  private String name;
  //private String price;
  private Double price;//注意数据类型啊,好像也不是这个问题
/*public String getName() {
    return name;
}*/
public void setName(String name) {
    this.name = name;
}
/*public Double getPrice() {
    return price;
}*/
public void setPrice(Double price) {
    this.price = price;
}
@Override
public String toString() {
    return "Car2 [name=" + name + ", price=" + price + "]";
}
    
    
    
    
}
package cn.itcast.spring3.demo5;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringTest5 {
    
    
    @Test
    public void demo5(){//Spring注入属性的两种方式:一种是构造器的注入
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    Car car = (Car) applicationContext.getBean("car");
    System.out.println(car);
    
    }
    @Test
    public void demo6(){//还有一种是setter方法的注入
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        Car2 car2 = (Car2) applicationContext.getBean("car2");
        System.out.println(car2);
        
    }
    @Test
    public void demo7(){//还有一种是setter方法的注入
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        Person person = (Person) applicationContext.getBean("person");
        System.out.println(person);
        
    }
    
    
    

}
<?xml version="1.0" encoding="UTF-8"?>
<!-- 别去schema,schema是文件,本地的文件,你得引那个头 -->

<beans xmlns="http://www.springframework.org/schema/beans"
       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">
<!-- demo1快速入门================================================= -->
<!-- 把接口和实现类在这个配置文件中配置,有了实现类的全路径之后到时候才能用工厂反射 -->
   
   <!-- 通过一个<bean>标签来设置类的信息,通过id属性为类起个标识. -->
    <!-- 接口,实现类,配置文件也都有了 -->
    <!-- 现在有一个工厂Spring为我们提供好了,其实就是解析这个XML文件 -->
    <!-- 这个工厂你自己写会不会写?你用dom4j找里面的bean标签,找到class的属性值,然后就可以Class.forName()反射生成类的实例.其实Spring
         也是这么做的,只不过工厂由Spring提供好了
     -->
    <bean id="helloService" class="cn.itcast.spring3.demo1.HelloServiceImpl">
         <!-- 使用<property>标签注入属性 
         value指的是普通值
         ref指的是对象
         -->
    <property name="info"  value="传智播客"></property>
    </bean>
    <!-- demo1快速入门 -->
    <!-- demo2Bean的实例化 -->
    <!-- 默认情况下使用的就是无参数的构造方法. -->
    <!-- 
    <bean id="bean1" class="cn.itcast.spring3.demo2.Bean1"></bean>
    -->
    <!-- 
    <bean name="bean1" class="cn.itcast.spring3.demo2.Bean1"></bean>
    -->
    <!-- 第二种使用静态工厂实例化 不能写class了,因为现在不是由Spring直接帮你创建对象了-->
    <!--  
    <bean id="bean2" class="cn.itcast.spring3.demo2.Bean2Factory" factory-method="getBean2"></bean>
    -->
    <!-- 第三种使用实例工厂实例化 -->
    <!-- 
    <bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>
    -->
    <!-- 要先把Bean3Factory实例化 -->
    <!--  
    <bean id="bean3Factory" class="cn.itcast.spring3.demo2.Bean3Factory"></bean>
    -->
    <!-- demo2Bean的实例化======================  end-->
    
    <!-- demo3Bean的作用范围======================= -->
    <!--  
    <bean id="customer" class="cn.itcast.spring3.demo3.Customer" scope="prototype"></bean>
    -->
    <!-- 
    <bean id="product" class="cn.itcast.spring3.demo3.Product" init-method="setup" destroy-method="teardown" scope="singleton">
       <property name="name" value="空调">-->
       <!-- 把Product类的属性name注入进来 -->
       <!-- 
       </property>
    </bean>    
 -->

       <!-- demo4Bean的生命周期======================= -->
       <!--  
       <bean id="customerService" class="cn.itcast.spring3.demo4.CustomerServiceImpl" init-method="setup"  destroy-method="teardown">
       
          <property name="name" value="itcast"></property>
       </bean>
       -->
       <!-- 后处理Bean是由Spring容器自动调用不用你管,我们起个id是为了我们在程序中去获得它。但是这个类不用由我们获得, 由Spring自动调用。cn.itcast.spring3.demo4.MyBeanPostProcessor是后处理Bean-->
        <!-- <bean class="cn.itcast.spring3.demo4.MyBeanPostProcessor"></bean>-->
       <!-- demo5Bean的属性注入=====================================================================================================================================-->
       <!-- 构造方法的注入 -->
       <bean id="car" class="cn.itcast.spring3.demo5.Car">
        <constructor-arg name="name" value="宝马"><!-- 通过这个标签为类注入属性 -->
        </constructor-arg>
        <constructor-arg name="price" value="1000000"><!-- 通过这个标签为类注入属性 -->
        </constructor-arg>
        <!--  
        <constructor-arg index="0" type="java.lang.String" value="奔驰">--><!-- 通过这个标签为类注入属性 -->
        <!-- </constructor-arg>-->
        <!--  
        <constructor-arg index="1" type="java.lang.Double" value="2000000">--><!-- 通过这个标签为类注入属性 -->     
       
       <!-- </constructor-arg>-->
       </bean>
       <bean id="car2" class="cn.itcast.spring3.demo5.Car2">
       <!-- <property>标签中name就是属性名称,value是普通属性的值,
       ref:引用其他的对象 
       -->
       <property name="name" value="保时捷奇瑞QQ"></property>
       <property name="price" value="500000020000"></property>
       </bean>
       <bean id="person" class="cn.itcast.spring3.demo5.Person">
           <property name="name" value="任童"></property>
           <property name="car2" ref="car2"></property>
       </bean>
       
</beans>
原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/6724843.html