注入的方式:
1.属性注入(setter方法)
2.构造方法注入
3.p名称空间注入

复杂属性的注入:
1.对象的注入
2.数组注入&List集合注入&Map注入&Properties注入

属性注入

属性注入就是通过setter方法注入Bean的属性值或依赖的对象。

属性植入使用<property>元素,使用name属性指定Bean的属性名称,value属性或者<value>子节点指定属性值

属性注入是实际应用中最常用的注入方式。

构造方法注入

通过构造方法注入Bean的属性值或依赖的对象,它保证了Bean实例化以后就可以使用。

构造器注入在<constructor-arg>元素里申明属性,<constructor-arg>中没有name属性

  1. package logan.spring.study;
  2.  
  3. public class Car {
  4. private String brand;
  5. private String corp;
  6. private int price;
  7. private int maxspeed;
  8. public Car(String brand, String corp, int price) {
  9. super();
  10. this.brand = brand;
  11. this.corp = corp;
  12. this.price = price;
  13. }
  14. @Override
  15. public String toString() {
  16. return "Car [brand=" + brand + ", corp=" + corp + ", price=" + price + ", maxspeed=" + maxspeed + "]";
  17. }
  18. }
  1. package logan.spring.study;
  2.  
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;
  5.  
  6. public class Main {
  7.  
  8. public static void main(String[] args) {
  9. // TODO Auto-generated method stub
  10. //1.创建Spring的IOC容器对象
  11. ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
  12.  
  13. Car car = ctx.getBean(Car.class);
  14. System.out.println(car);
  15.  
  16. }
  17.  
  18. }
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5.  
  6. <!-- 通过构造方法来配置Bean的属性 -->
  7. <bean id="car" class="logan.spring.study.Car">
  8. <constructor-arg value="Audi"></constructor-arg>
  9. <constructor-arg value="Shanghai"></constructor-arg>
  10. <constructor-arg value="3000000"></constructor-arg>
  11. </bean>
  12.  
  13. </beans>

还可以这样配置,根据index来安排属性赋值的序号,第一个为0.

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5.  
  6. <!-- 通过构造方法来配置Bean的属性 -->
  7. <bean id="car" class="logan.spring.study.Car">
  8. <constructor-arg value="Audi" index="0"></constructor-arg>
  9. <constructor-arg value="Shanghai" index="1"></constructor-arg>
  10. <constructor-arg value="3000000" index="2"></constructor-arg>
  11. </bean>
  12.  
  13. </beans>

当如下配置时,会不合逻辑,因为Bean里面有两个构造函数,构造函数的参数不一样,所以这个时候根据序号已经不能满足指定使用哪个构造函数还构造Bean的实例,所以会出现实例化出错。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5.  
  6. <!-- 通过构造方法来配置Bean的属性 -->
  7. <bean id="car" class="logan.spring.study.Car">
  8. <constructor-arg value="Audi" index="0"></constructor-arg>
  9. <constructor-arg value="Shanghai" index="1"></constructor-arg>
  10. <constructor-arg value="3000000" index="2"></constructor-arg>
  11. </bean>
  12. <bean id="car2" class="logan.spring.study.Car">
  13. <constructor-arg value="Baoma"></constructor-arg>
  14. <constructor-arg value="Shanghai"></constructor-arg>
  15. <constructor-arg value="240"></constructor-arg>
  16. </bean>
  17.  
  18. </beans>
  1. package logan.spring.study;
  2.  
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;
  5.  
  6. public class Main {
  7.  
  8. public static void main(String[] args) {
  9. // TODO Auto-generated method stub
  10. //1.创建Spring的IOC容器对象
  11. ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
  12.  
  13. Car car = (Car) ctx.getBean("car");
  14. System.out.println(car);
  15. Car car2 = (Car) ctx.getBean("car2");
  16. System.out.println(car2);
  17.  
  18. }
  19.  
  20. }

这个是得到的结果

  1. 五月 18, 2017 10:00:14 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
  2. 信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@3eb07fd3: startup date [Thu May 18 22:00:14 CST 2017]; root of context hierarchy
  3. 五月 18, 2017 10:00:14 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
  4. 信息: Loading XML bean definitions from class path resource [applicationContext.xml]
  5. HelloWorld's Constructor...
  6. HelloWorld's Constructor...
  7. Car [brand=Audi, corp=Shanghai, price=3000000.0, maxspeed=0]
  8. Car [brand=Baoma, corp=Shanghai, price=240.0, maxspeed=0]

可以看到我们的本意是想把240赋值到最大速度上,但是事实上240没有赋值到maxSpeed上而是赋值到价格上。

这个时候的解决方案是根据type来看使用哪一个构造函数。

如下修改配置文件可以正确赋值

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5.  
  6. <!-- 通过构造方法来配置Bean的属性 -->
  7. <bean id="car" class="logan.spring.study.Car">
  8. <constructor-arg value="Audi" index="0"></constructor-arg>
  9. <constructor-arg value="Shanghai" index="1"></constructor-arg>
  10. <constructor-arg value="3000000" index="2" type="double"></constructor-arg>
  11. </bean>
  12. <bean id="car2" class="logan.spring.study.Car">
  13. <constructor-arg value="Baoma" type="java.lang.String"></constructor-arg>
  14. <constructor-arg value="Shanghai" type="java.lang.String"></constructor-arg>
  15. <constructor-arg value="240" type="int"></constructor-arg>
  16. </bean>
  17.  
  18. </beans>

得到如下结果:使用构造器注入属性值时可以指定参数的位置和参数的类型!以区分重载的构造器

  1. 五月 18, 2017 10:04:26 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
  2. 信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@3eb07fd3: startup date [Thu May 18 22:04:26 CST 2017]; root of context hierarchy
  3. 五月 18, 2017 10:04:26 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
  4. 信息: Loading XML bean definitions from class path resource [applicationContext.xml]
  5. HelloWorld's Constructor...
  6. HelloWorld's Constructor...
  7. Car [brand=Audi, corp=Shanghai, price=3000000.0, maxspeed=0]
  8. Car [brand=Baoma, corp=Shanghai, price=0.0, maxspeed=240]

还可以如下配置,使用子节点给属性赋值

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5. <!-- 通过构造方法来配置Bean的属性 -->
  6. <bean id="car" class="logan.spring.study.Car">
  7. <constructor-arg value="Audi" index="0"></constructor-arg>
  8. <constructor-arg value="Shanghai" index="1"></constructor-arg>
  9. <constructor-arg value="3000000" index="2" type="double"></constructor-arg>
  10. </bean>
  11. <bean id="car2" class="logan.spring.study.Car">
  12. <constructor-arg value="Baoma" type="java.lang.String"></constructor-arg>
  13. <constructor-arg value="Shanghai" type="java.lang.String"></constructor-arg>
  14. <constructor-arg type="int">
  15. <value>250</value>
  16. </constructor-arg>
  17. </bean>
  18.  
  19. </beans>

字面值:可以使用字符串表示的值,可以通过<value>元素标签或者value属性进行注入。

基本数据类型及其封装类,String等类型都可以采取字面值注入的方式

若字面值中包含特殊字符,可以使用<![CDATA[]]>把字面值包裹起来。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5.  
  6. <!-- 通过构造方法来配置Bean的属性 -->
  7. <bean id="car" class="logan.spring.study.Car">
  8. <constructor-arg value="Audi" index="0"></constructor-arg>
  9. <constructor-arg value="Shanghai" index="1"></constructor-arg>
  10. <constructor-arg value="3000000" index="2" type="double"></constructor-arg>
  11. </bean>
  12. <bean id="car2" class="logan.spring.study.Car">
  13. <constructor-arg value="Baoma" type="java.lang.String"></constructor-arg>
  14. <constructor-arg type="java.lang.String">
  15. <value><![CDATA[<Shanghai>]]></value>
  16. </constructor-arg>
  17. <constructor-arg type="int">
  18. <value>250</value>
  19. </constructor-arg>
  20. </bean>
  21.  
  22. </beans>

下面看Bean相互引用

组成应用程序的Bean经常需要相互协作以完成应用程序的功能。要使Bean能够相互访问,就必须在Bean配置文件中指定对Bean的引用。

在Bean的配置文件中,可以通过<ref>元素或者ref属性为Bean的属性或者构造器参数指定对Bean的引用。

也可以在属性或者构造器里包含Bean的声明,这样的Bean称为内部Bean。

  1. package logan.spring.study;
  2.  
  3. public class Person {
  4.  
  5. private String name;
  6.  
  7. private int age;
  8.  
  9. private Car car;
  10.  
  11. public String getName() {
  12. return name;
  13. }
  14.  
  15. public void setName(String name) {
  16. this.name = name;
  17. }
  18.  
  19. public int getAge() {
  20. return age;
  21. }
  22.  
  23. public void setAge(int age) {
  24. this.age = age;
  25. }
  26.  
  27. public Car getCar() {
  28. return car;
  29. }
  30.  
  31. public void setCar(Car car) {
  32. this.car = car;
  33. }
  34.  
  35. @Override
  36. public String toString() {
  37. return "Person [name=" + name + ", age=" + age + ", car=" + car + "]";
  38. }
  39. }
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5.  
  6. <!-- 通过构造方法来配置Bean的属性 -->
  7. <bean id="car" class="logan.spring.study.Car">
  8. <constructor-arg value="Audi" index="0"></constructor-arg>
  9. <constructor-arg value="Shanghai" index="1"></constructor-arg>
  10. <constructor-arg value="3000000" index="2" type="double"></constructor-arg>
  11. </bean>
  12. <bean id="car2" class="logan.spring.study.Car">
  13. <constructor-arg value="Baoma" type="java.lang.String"></constructor-arg>
  14. <constructor-arg type="java.lang.String">
  15. <value><![CDATA[<Shanghai>]]></value>
  16. </constructor-arg>
  17. <constructor-arg type="int">
  18. <value>250</value>
  19. </constructor-arg>
  20. </bean>
  21.  
  22. <bean id="person" class="logan.spring.study.Person">
  23. <property name="name" value="Tom"></property>
  24. <property name="age" value="24"></property>
  25. <property name="car" ref="car2"></property>
  26. </bean>
  27.  
  28. </beans>
  1. package logan.spring.study;
  2.  
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;
  5.  
  6. public class Main {
  7.  
  8. public static void main(String[] args) {
  9. // TODO Auto-generated method stub
  10. //1.创建Spring的IOC容器对象
  11. ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
  12.  
  13. Car car = (Car) ctx.getBean("car");
  14. System.out.println(car);
  15. Car car2 = (Car) ctx.getBean("car2");
  16. System.out.println(car2);
  17. Person person = ctx.getBean(Person.class);
  18. System.out.println(person);
  19. }
  20.  
  21. }

下面是输出结果

  1. 五月 18, 2017 10:21:47 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
  2. 信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@3eb07fd3: startup date [Thu May 18 22:21:47 CST 2017]; root of context hierarchy
  3. 五月 18, 2017 10:21:47 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
  4. 信息: Loading XML bean definitions from class path resource [applicationContext.xml]
  5. HelloWorld's Constructor...
  6. HelloWorld's Constructor...
  7. Car [brand=Audi, corp=Shanghai, price=3000000.0, maxspeed=0]
  8. Car [brand=Baoma, corp=<Shanghai>, price=0.0, maxspeed=250]
  9. Person [name=Tom, age=24, car=Car [brand=Baoma, corp=<Shanghai>, price=0.0, maxspeed=250]]

看内部Bean配置方法:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5.  
  6. <!-- 通过构造方法来配置Bean的属性 -->
  7. <bean id="car" class="logan.spring.study.Car">
  8. <constructor-arg value="Audi" index="0"></constructor-arg>
  9. <constructor-arg value="Shanghai" index="1"></constructor-arg>
  10. <constructor-arg value="3000000" index="2" type="double"></constructor-arg>
  11. </bean>
  12. <bean id="car2" class="logan.spring.study.Car">
  13. <constructor-arg value="Baoma" type="java.lang.String"></constructor-arg>
  14. <constructor-arg type="java.lang.String">
  15. <value><![CDATA[<Shanghai>]]></value>
  16. </constructor-arg>
  17. <constructor-arg type="int">
  18. <value>250</value>
  19. </constructor-arg>
  20. </bean>
  21.  
  22. <bean id="person" class="logan.spring.study.Person">
  23. <property name="name" value="Tom"></property>
  24. <property name="age" value="24"></property>
  25. <property name="car">
  26. <bean class="logan.spring.study.Car">
  27. <constructor-arg value="Ford"></constructor-arg>
  28. <constructor-arg value="Changan"></constructor-arg>
  29. <constructor-arg value="20000000" type="double"></constructor-arg>
  30. </bean>
  31. </property>
  32. </bean>
  33.  
  34. </beans>

运行结果

  1. 五月 18, 2017 10:36:26 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
  2. 信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@3eb07fd3: startup date [Thu May 18 22:36:26 CST 2017]; root of context hierarchy
  3. 五月 18, 2017 10:36:26 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
  4. 信息: Loading XML bean definitions from class path resource [applicationContext.xml]
  5. HelloWorld's Constructor...
  6. HelloWorld's Constructor...
  7. Car [brand=Audi, corp=Shanghai, price=3000000.0, maxspeed=0]
  8. Car [brand=Baoma, corp=<Shanghai>, price=0.0, maxspeed=250]
  9. Person [name=Tom, age=24, car=Car [brand=Ford, corp=Changan, price=2.0E7, maxspeed=0]]

注意:内部Bean不能被外部Bean引用。

还可以如下配置,根据构造方法来实例化Bean

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5.  
  6. <!-- 通过构造方法来配置Bean的属性 -->
  7. <bean id="car" class="logan.spring.study.Car">
  8. <constructor-arg value="Audi" index="0"></constructor-arg>
  9. <constructor-arg value="Shanghai" index="1"></constructor-arg>
  10. <constructor-arg value="3000000" index="2" type="double"></constructor-arg>
  11. </bean>
  12. <bean id="car2" class="logan.spring.study.Car">
  13. <constructor-arg value="Baoma" type="java.lang.String"></constructor-arg>
  14. <constructor-arg type="java.lang.String">
  15. <value><![CDATA[<Shanghai>]]></value>
  16. </constructor-arg>
  17. <constructor-arg type="int">
  18. <value>250</value>
  19. </constructor-arg>
  20. </bean>
  21.  
  22. <bean id="person" class="logan.spring.study.Person">
  23. <property name="name" value="Tom"></property>
  24. <property name="age" value="24"></property>
  25. <property name="car">
  26. <bean class="logan.spring.study.Car">
  27. <constructor-arg value="Ford"></constructor-arg>
  28. <constructor-arg value="Changan"></constructor-arg>
  29. <constructor-arg value="20000000" type="double"></constructor-arg>
  30. </bean>
  31. </property>
  32. </bean>
  33.  
  34. <bean id="person2" class="logan.spring.study.Person">
  35. <constructor-arg value="Jerry"></constructor-arg>
  36. <constructor-arg value="25"></constructor-arg>
  37. <constructor-arg ref="car"></constructor-arg>
  38. </bean>
  39.  
  40. </beans>
  1. package logan.spring.study;
  2.  
  3. public class Person {
  4.  
  5. private String name;
  6.  
  7. private int age;
  8.  
  9. private Car car;
  10.  
  11. public String getName() {
  12. return name;
  13. }
  14.  
  15. public void setName(String name) {
  16. this.name = name;
  17. }
  18.  
  19. public int getAge() {
  20. return age;
  21. }
  22.  
  23. public void setAge(int age) {
  24. this.age = age;
  25. }
  26.  
  27. public Car getCar() {
  28. return car;
  29. }
  30.  
  31. public void setCar(Car car) {
  32. this.car = car;
  33. }
  34.  
  35. @Override
  36. public String toString() {
  37. return "Person [name=" + name + ", age=" + age + ", car=" + car + "]";
  38. }
  39.  
  40. public Person() {
  41. // TODO Auto-generated constructor stub
  42. }
  43.  
  44. public Person(String name, int age, Car car) {
  45. super();
  46. this.name = name;
  47. this.age = age;
  48. this.car = car;
  49. }
  50.  
  51. }
  1. package logan.spring.study;
  2.  
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;
  5.  
  6. public class Main {
  7.  
  8. public static void main(String[] args) {
  9. // TODO Auto-generated method stub
  10. //1.创建Spring的IOC容器对象
  11. ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
  12.  
  13. Car car = (Car) ctx.getBean("car");
  14. System.out.println(car);
  15. Car car2 = (Car) ctx.getBean("car2");
  16. System.out.println(car2);
  17. Person person = (Person) ctx.getBean("person2");
  18. System.out.println(person);
  19. }
  20.  
  21. }

输出结果如下:

  1. 五月 18, 2017 10:43:51 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
  2. 信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@3eb07fd3: startup date [Thu May 18 22:43:51 CST 2017]; root of context hierarchy
  3. 五月 18, 2017 10:43:51 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
  4. 信息: Loading XML bean definitions from class path resource [applicationContext.xml]
  5. HelloWorld's Constructor...
  6. HelloWorld's Constructor...
  7. Car [brand=Audi, corp=Shanghai, price=3000000.0, maxspeed=0]
  8. Car [brand=Baoma, corp=<Shanghai>, price=0.0, maxspeed=250]
  9. Person [name=Jerry, age=25, car=Car [brand=Audi, corp=Shanghai, price=3000000.0, maxspeed=0]]

2.数组注入&List集合注入&Map注入&Properties注入

applicationContext.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5.  
  6. <!-- 配置bean
  7. class:bean的全类名,通过反射的方式在IOC容器中创建bean,所以要求Bean中必须有无参的构造函数
  8. id:表示容器的bean,id唯一 -->
  9. <bean id="persionService" class="com.study.entity.Persion">
  10. <property name="name" value="xiaozhang"></property>
  11. <property name="age" value="29"></property>
  12. <property name="car" ref="car2"></property>
  13. </bean>
  14.  
  15. <bean id="persionService1" class="com.study.entity.Persion">
  16. <property name="name" value="xiaozhang"></property>
  17. <property name="age" value="29"></property>
  18. <property name="car">
  19. <bean class="com.study.entity.Car">
  20. <constructor-arg value="Ford"></constructor-arg>
  21. <constructor-arg value="Changan"></constructor-arg>
  22. <constructor-arg value="2000000" type="int"></constructor-arg>
  23. </bean>
  24. </property>
  25. </bean>
  26.  
  27. <bean id="persionService3" class="com.study.entity.Persion">
  28. <constructor-arg value="Jerry"></constructor-arg>
  29. <constructor-arg value="26"></constructor-arg>
  30. <constructor-arg ref="car"></constructor-arg>
  31. </bean>
  32. <bean id="persionService4" class="com.study.entity.Persion">
  33. <property name="name" value="Tom"></property>
  34. <property name="age" value="27"></property>
  35. <property name="car" ref="car"></property>
  36. <property name="wayToCompany">
  37. <list>
  38. <value>walk</value>
  39. <value>bike</value>
  40. <value>subway</value>
  41. <value>walk</value>
  42. </list>
  43. </property>
  44. <property name="money">
  45. <map>
  46. <entry key="三月" value="10000"></entry>
  47. <entry key="四月" value="10001"></entry>
  48. <entry key="五月" value="10002"></entry>
  49. <entry key="六月" value="10003"></entry>
  50. </map>
  51. </property>
  52. </bean>
  53. <bean id="car" class="com.study.entity.Car">
  54. <constructor-arg value="Audi" index="1"></constructor-arg>
  55. <constructor-arg value="Shanghai" index="0"></constructor-arg>
  56. <constructor-arg value="3000000" index="2"></constructor-arg>
  57. </bean>
  58.  
  59. <bean id="car2" class="com.study.entity.Car">
  60. <constructor-arg index="1">
  61. <value><![CDATA[<Shanghai>]]></value>
  62. </constructor-arg>
  63. <constructor-arg value="Shanghai" index="0"></constructor-arg>
  64. <constructor-arg value="240" index="2" type="double"></constructor-arg>
  65. </bean>
  66.  
  67. </beans>

Persion.java

  1. package com.study.entity;
  2.  
  3. import java.util.List;
  4. import java.util.Map;
  5.  
  6. public class Persion {
  7.  
  8. private String name;
  9. private Integer age;
  10. private Car car;
  11. private List wayToCompany;
  12. private Map money;
  13. public String getName() {
  14. return name;
  15. }
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19. public Integer getAge() {
  20. return age;
  21. }
  22. public void setAge(Integer age) {
  23. this.age = age;
  24. }
  25. public Car getCar() {
  26. return car;
  27. }
  28. public void setCar(Car car) {
  29. this.car = car;
  30. }
  31.  
  32. public List getWayToCompany() {
  33. return wayToCompany;
  34. }
  35. public void setWayToCompany(List wayToCompany) {
  36. this.wayToCompany = wayToCompany;
  37. }
  38. public Map getMoney() {
  39. return money;
  40. }
  41. public void setMoney(Map money) {
  42. this.money = money;
  43. }
  44.  
  45. public Persion(String name, Integer age, Car car) {
  46. super();
  47. this.name = name;
  48. this.age = age;
  49. this.car = car;
  50. }
  51. public Persion() {
  52. super();
  53. // TODO Auto-generated constructor stub
  54. }
  55. @Override
  56. public String toString() {
  57. return "Persion [name=" + name + ", age=" + age + ", car=" + car + ", wayToCompany=" + wayToCompany + ", money="
  58. + money + "]";
  59. }
  60.  
  61. }

TestPersion.java

  1. package com.study.entity;
  2.  
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;
  5.  
  6. public class TestPersion {
  7.  
  8. public static void main(String[] args) {
  9. // TODO Auto-generated method stub
  10. Persion p1 = new Persion();
  11. p1.setName("xiaoming");
  12. System.out.println(p1.getName());
  13.  
  14. ApplicationContext ext = new ClassPathXmlApplicationContext("applicationContext.xml");
  15.  
  16. Persion p2 = (Persion) ext.getBean("persionService");
  17. System.out.println(p2.toString());
  18.  
  19. Persion p3 = (Persion) ext.getBean("persionService1");
  20. System.out.println(p3.toString());
  21.  
  22. Persion p4 = (Persion) ext.getBean("persionService3");
  23. System.out.println(p4.toString());
  24.  
  25. Persion p5 = (Persion) ext.getBean("persionService4");
  26. System.out.println(p5.toString());
  27. }
  28.  
  29. }

输出结果:

  1. xiaoming
  2. 三月 06, 2020 10:12:14 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
  3. 信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@4d405ef7: startup date [Fri Mar 06 22:12:14 CST 2020]; root of context hierarchy
  4. 三月 06, 2020 10:12:15 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
  5. 信息: Loading XML bean definitions from class path resource [applicationContext.xml]
  6. Persion [name=xiaozhang, age=29, car=Car [brand=Shanghai, corp=<Shanghai>, price=0, maxSpeed=240.0], wayToCompany=null, money=null]
  7. Persion [name=xiaozhang, age=29, car=Car [brand=Ford, corp=Changan, price=2000000, maxSpeed=0.0], wayToCompany=null, money=null]
  8. Persion [name=Jerry, age=26, car=Car [brand=Shanghai, corp=Audi, price=3000000, maxSpeed=0.0], wayToCompany=null, money=null]
  9. Persion [name=Tom, age=27, car=Car [brand=Shanghai, corp=Audi, price=3000000, maxSpeed=0.0], wayToCompany=[walk, bike, subway, walk], money={三月=10000, 四月=10001, 五月=10002, 六月=10003}]

大家可以看到,数组和List集合的注入方式是一样的。Map由于是以键值对的形式存储的,所以注入稍微有一点区别。

Spring入门第三课的更多相关文章

  1. Spring入门第三十课

    基于XML的方式配置事务 直接看代码: package logan.study.spring.tx.xml; public interface BookShopDao { //根据书号获取书的单价 p ...

  2. Kotlin入门第三课:数据类型

    前文链接: Kotlin学习第一课:从对比Java开始 Kotlin入门第二课:集合操作 初次尝试用Kotlin实现Android项目 Kotlin的数据类型与Java类似,因此这篇文章主要看Kotl ...

  3. Spring入门第六课

    XML配置里的Bean自动装配 Spring IOC容器可以自动装配Bean.需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式 ByType(根据类型自动装配):若I ...

  4. Spring入门第五课

    集合属性 在Spring中可以通过一组内置的xml标签(如:<list>,<set>,<map>)来配置集合属性. 配置java.util.List类型的属性,需要 ...

  5. Spring入门第四课

    注入参数详解:null值和级联属性 可以使用专用的<null/>元素标签为Bean的字符串或其他对象类型的属性注入null值. 和Struts,Hiberante等框架一样,Spring支 ...

  6. Spring入门第十三课

    通过FactoryBean来配置Bean package logan.spring.study.factoryBean; public class Car { private String brand ...

  7. Spring入门第十一课

    IOC容器中Bean的生命周期 Spring IOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的任务. Spring IOC容器对Bean的生命周期进行管理的过 ...

  8. Spring入门第十课

    Spring表达式语言:SpEL Spring表达式语言(简称SpEL)是一个支持运行时查询和操作对象图的强大的表达式语言. 语法类似于EL:SpEL使用#{...}作为定界符,所有在大括号中的字符都 ...

  9. Spring入门第八课

    看如下代码 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:// ...

随机推荐

  1. 20145210姚思羽《网络对抗》——shellcode注入& Return-to-libc攻击深入

    20145210姚思羽<网络对抗>shellcode注入&Return-to-libc攻击深入 shellcode基础知识 Shellcode是一段代码,作为数据发送给受攻击服务器 ...

  2. 《python基础教程(第二版)》学习笔记 字典(第4章)

    <python基础教程(第二版)>学习笔记 字典(第4章)创建字典:d={'key1':'value1','key2':'value2'}lst=[('key1','value1'),(' ...

  3. SparkRDD内核

    Spark内核 RDD是基础,是spark中一个基础的抽象,是不可变的,比如我们加载进的数据RDD,如果想更改其中的内容是不允许的:分区的集合,可以并行来计算:RDD类中包含了很多基础的操作,例如ma ...

  4. DBGrideh 实现自动排序

    一.点击标题自动排序 1.在optioneh中设置:AutosortMarking:=True2.设置DbGridEh的属性:(不一定总要设置,与使用的数据连接有关)sortlocal:=True;3 ...

  5. jQuery - 获取/设置内容和属性

    获得内容 - text().html() 以及 val() 三个简单实用的用于 DOM 操作的 jQuery 方法: text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元 ...

  6. C趣味题目

    http://www.cnblogs.com/lua5/archive/2010/12/05/1896755.html   c语言趣味题目 http://www.cppblog.com/OnTheWa ...

  7. linux-常用指令3

    系统管理命令 stat              显示指定文件的详细信息,比ls更详细 who               显示在线登陆用户 whoami          显示当前操作用户 host ...

  8. linux apt-get remove如何恢复

    linux卸载或删除软件时,若不小心删除到关联的软件,如果想撤销删除操作需要在/var/log/apt/history.log中依次安装删除的软件,具体操作如下: $echo '#!/bin/bash ...

  9. 树套树Day2

    滚回来更新,,, 在Day1我们学了最基本的线段树套平衡树 Day2开始我们要学习一些黑科技 (所以很大概率会出现Day3 w 1.线段树上的黑科技 这一段我们分几项来讲 1.权值线段树 权值线段树以 ...

  10. findBug 错误修改指南

      1. EC_UNRELATED_TYPESBug: Call to equals() comparing different types Pattern id: EC_UNRELATED_TYPE ...