3、引用其他bean
Bean经常需要相互协作完成应用程序的功能,bean之间必须能够互相访问,就必须在bean配置之间指定对bean的引用,可以通过节点<ref>或者ref来为bean属性指定对bean的引用,也可以在属性或者构造器里包含bean的声明,这样bean称为内部bean。
bean中引用其他bean,其中Car为对象。
1 <!-- 通过构造方法配置bean属性 --> 2 <bean id="car" class="hello.Car"> 3 <constructor-arg value="Audi" index="0"></constructor-arg> 4 <constructor-arg value="ShangHai" index="1"></constructor-arg> 5 <constructor-arg value="300000" type="double" ></constructor-arg> 6 7 </bean> 8 9 <bean id="person" class="hello.Person"> 10 <property name="name" value = "Tom"></property> 11 <property name="age" value = "24"></property> 12 <property name="car" ref="car"></property> 13 </bean>
内部bean
1 <bean id="person" class="hello.Person"> 2 <property name="name" value = "Tom"></property> 3 <property name="age" value = "24"></property> 4 <!-- 5 <property name="car" ref="car"></property>--> 6 7 <!-- 内部bean --> 8 <property name="car"> 9 <!-- 内部bean不能被外部bean使用 --> 10 <bean id="car3" class="hello.Car"> 11 <constructor-arg value="Ford"></constructor-arg> 12 <constructor-arg value="Changan"></constructor-arg> 13 <constructor-arg value="200000" type="double"></constructor-arg> 14 15 </bean> 16 </property> 17 </bean>
4、集合属性
在Spring中可以通过<list>、<set>或者<map>来配置集合属性。
通过list配置集合属性
Person.java
1 package com.spring; 2 3 import java.util.List; 4 5 public class Person { 6 private String name; 7 private int age; 8 private List<Car> cars; 9 public String getName() { 10 return name; 11 } 12 public void setName(String name) { 13 this.name = name; 14 } 15 public int getAge() { 16 return age; 17 } 18 public void setAge(int age) { 19 this.age = age; 20 } 21 public List<Car> getCars() { 22 return cars; 23 } 24 public void setCars(List<Car> cars) { 25 this.cars = cars; 26 } 27 @Override 28 public String toString() { 29 return "Person [name=" + name + ", age=" + age + ", cars=" + cars + "]"; 30 } 31 32 33 34 }
Car.java
1 package com.spring; 2 3 public class Car { 4 private String brand; 5 private double price; 6 private int maxSpeed; 7 public String getBrand() { 8 return brand; 9 } 10 public void setBrand(String brand) { 11 this.brand = brand; 12 } 13 public double getPrice() { 14 return price; 15 } 16 public void setPrice(double price) { 17 this.price = price; 18 } 19 public int getMaxSpeed() { 20 return maxSpeed; 21 } 22 public void setMaxSpeed(int maxSpeed) { 23 this.maxSpeed = maxSpeed; 24 } 25 @Override 26 public String toString() { 27 return "Car [brand=" + brand + ", price=" + price + ", maxSpeed=" + maxSpeed + "]"; 28 } 29 30 }
beans-collection.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 xmlns:util="http://www.springframework.org/schema/util" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 6 http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd"> 7 8 <bean id="car1" class="com.spring.Car"> 9 <property name="brand" value="audi"></property> 10 <property name="price" value="400000"></property> 11 <property name="maxSpeed" value="240"></property> 12 </bean> 13 14 <bean id="car2" class="com.spring.Car"> 15 <property name="brand" value="baoma"></property> 16 <property name="price" value="700000"></property> 17 <property name="maxSpeed" value="270"></property> 18 </bean> 19 20 <bean id="person" class="com.spring.Person"> 21 <property name="name" value="Jerry"></property> 22 <property name="age" value="41"></property> 23 <property name="cars"> 24 <list> 25 <ref bean="car1" /> 26 <ref bean="car2" /> 27 </list> 28 </property> 29 </bean> 30 </beans>
结果:
通过map配置属性
Person.java
1 package com.spring; 2 3 import java.util.Map; 4 5 public class Person { 6 private String name; 7 private int age; 8 private Map<String, Car> carMap; 9 public String getName() { 10 return name; 11 } 12 public void setName(String name) { 13 this.name = name; 14 } 15 public int getAge() { 16 return age; 17 } 18 public void setAge(int age) { 19 this.age = age; 20 } 21 public Map<String, Car> getCarMap() { 22 return carMap; 23 } 24 public void setCarMap(Map<String, Car> carMap) { 25 this.carMap = carMap; 26 } 27 @Override 28 public String toString() { 29 return "Person [name=" + name + ", age=" + age + ", carMap=" + carMap + "]"; 30 } 31 }
beans-collection
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 xmlns:util="http://www.springframework.org/schema/util" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 6 http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd"> 7 8 <bean id="car1" class="com.spring.Car"> 9 <property name="brand" value="audi"></property> 10 <property name="price" value="400000"></property> 11 <property name="maxSpeed" value="240"></property> 12 </bean> 13 14 <bean id="car2" class="com.spring.Car"> 15 <property name="brand" value="baoma"></property> 16 <property name="price" value="700000"></property> 17 <property name="maxSpeed" value="270"></property> 18 </bean> 19 20 <bean id="person" class="com.spring.Person"> 21 <property name="name" value="Jerry"></property> 22 <property name="age" value="41"></property> 23 <property name="carMap"> 24 <map> 25 <entry key="1" value-ref="car1"></entry> 26 <entry key="2" value-ref="car2"></entry> 27 </map> 28 </property> 29 </bean> 30 </beans>
结果:
配置Set属性,和配置list一样。
5、p名字空间注入,也需要setter方法。
Student.java
1 package com.spring; 2 3 public class Student { 4 private String name; 5 private String number; 6 7 public String getName() { 8 return name; 9 } 10 public void setName(String name) { 11 this.name = name; 12 } 13 public String getNumber() { 14 return number; 15 } 16 public void setNumber(String number) { 17 this.number = number; 18 } 19 20 @Override 21 public String toString() { 22 return "Student [name=" + name + ", number=" + number + "]"; 23 } 24 25 26 }
Main.java
1 package com.spring; 2 3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 6 public class Main { 7 public static void main(String[] args) { 8 ApplicationContext ac = new ClassPathXmlApplicationContext("beans-p.xml"); 9 Student student = (Student) ac.getBean("student"); 10 System.out.println(student); 11 } 12 }
beans-p.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 xmlns:p="http://www.springframework.org/schema/p" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 6 7 <bean id="student" class="com.spring.Student" p:name="Merry" p:number="1120141314"></bean> 8 9 </beans>
执行结果
6、property注入
Student.java
1 package com.spring; 2 3 import java.util.Properties; 4 5 public class Student { 6 private String name; 7 private String number; 8 private Properties properties; 9 10 public String getName() { 11 return name; 12 } 13 public void setName(String name) { 14 this.name = name; 15 } 16 public String getNumber() { 17 return number; 18 } 19 public void setNumber(String number) { 20 this.number = number; 21 } 22 public Properties getProperties() { 23 return properties; 24 } 25 public void setProperties(Properties properties) { 26 this.properties = properties; 27 } 28 @Override 29 public String toString() { 30 return "Student [name=" + name + ", number=" + number + ", properties=" + properties + "]"; 31 } 32 33 34 35 36 37 38 }
beans-p.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 xmlns:p="http://www.springframework.org/schema/p" 5 xmlns:util="http://www.springframework.org/schema/util" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 7 http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd"> 8 <bean id="student" class="com.spring.Student"> 9 <property name="name" value="Merry"></property> 10 <property name="number" value="1120141213"></property> 11 <property name="properties" > 12 <props> 13 <prop key="user">root</prop> 14 <prop key="psw">1234</prop> 15 <prop key="jdbcUrl">jdbc:mysql:///test</prop> 16 <prop key="driverClass">com.mysql.jdbc.Driver</prop> 17 </props> 18 </property> 19 20 </bean> 21 </beans>
执行结果
7、c命名空间注入