五:bean
一: 如何给集合类型注入值.
java中主要的集合有几种: map set list / 数组
Department类:
1 public class Department { 2 3 private String name; 4 private String [] empName; 5 private List<Employee> empList; 6 private Set<Employee> empsets; 7 private Map<String,Employee> empMaps; 8 9 public Set<Employee> getEmpsets() { 10 return empsets; 11 } 12 public void setEmpsets(Set<Employee> empsets) { 13 this.empsets = empsets; 14 } 15 public String[] getEmpName() { 16 return empName; 17 } 18 public void setEmpName(String[] empName) { 19 this.empName = empName; 20 } 21 public String getName() { 22 return name; 23 } 24 public void setName(String name) { 25 this.name = name; 26 } 27 public List<Employee> getEmpList() { 28 return empList; 29 } 30 public void setEmpList(List<Employee> empList) { 31 this.empList = empList; 32 } 33 public Map<String, Employee> getEmpMaps() { 34 return empMaps; 35 } 36 public void setEmpMaps(Map<String, Employee> empMaps) { 37 this.empMaps = empMaps; 38 } 39 40 }
//Employeel类
1 public class Employee { 2 private String name; 3 private int id; 4 public int getId() { 5 return id; 6 } 7 public void setId(int id) { 8 this.id = id; 9 } 10 public String getName() { 11 return name; 12 } 13 public void setName(String name) { 14 this.name = name; 15 } 16 }
beans.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:context="http://www.springframework.org/schema/context" 5 xmlns:tx="http://www.springframework.org/schema/tx" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 7 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd 8 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> 9 10 <bean id="department" class="com.hsp.collection.Department"> 11 <property name="name" value="财务部"/> 12 <!-- 给数组注入值 --> 13 <property name="empName"> 14 <list> 15 <value>小明</value> 16 <value>小明小明</value> 17 <value>小明小明小明小明</value> 18 </list> 19 </property> 20 <!-- 给list注入值 list 中可以有相当的对象 --> 21 <property name="empList"> 22 <list> 23 <ref bean="emp2" /> 24 <ref bean="emp1"/> 25 <ref bean="emp1"/> 26 <ref bean="emp1"/> 27 <ref bean="emp1"/> 28 <ref bean="emp1"/> 29 <ref bean="emp1"/> 30 </list> 31 </property> 32 <!-- 给set注入值 set不能有相同的对象 --> 33 <property name="empsets"> 34 <set> 35 <ref bean="emp1" /> 36 <ref bean="emp2"/> 37 <ref bean="emp2"/> 38 <ref bean="emp2"/> 39 <ref bean="emp2"/> 40 </set> 41 </property> 42 <!-- 给map注入值 map只有key不一样,就可以装配value --> 43 <property name="empMaps"> 44 <map> 45 <entry key="11" value-ref="emp1" /> 46 <entry key="22" value-ref="emp2"/> 47 <entry key="33" value-ref="emp1"/> 48 </map> 49 </property> 50 <!-- 给属性集合配置 -->【点http协议 referer 】 51 <property name="pp"> 52 <props> 53 <prop key="pp1">abcd</prop> 54 <prop key="pp2">hello</prop> 55 </props> 56 </property> 57 </bean> 58 <bean id="emp1" class="com.hsp.collection.Employee"> 59 <property name="name" value="北京"/> 60 <property name="id" value="1"/> 61 </bean> 62 <bean id="emp2" class="com.hsp.collection.Employee"> 63 <property name="name" value="天津"/> 64 <property name="id" value="2"/> 65 </bean> 66 </beans>
二: 内部bean
1 <bean id=”foo” class=”....Foo”> 2 <property name=”属性”> 3 <!—第一方法引用--> 4 <ref bean=’bean对象名’/> 5 <!—内部bean--> 6 <bean> 7 <properyt></property> 8 </bean> 9 </property> 10 </bean>
三: 继承配置
1 public class Student 2 public class Gradate extends Student 3 4 在beans.xml文件中体现配置 5 <!-- 配置一个学生对象 --> 6 <bean id="student" class="com.hsp.inherit.Student"> 7 <property name="name" value="顺平" /> 8 <property name="age" value="30"/> 9 </bean> 10 <!-- 配置Grdate对象 --> 11 <bean id="grdate" parent="student" class="com.hsp.inherit.Gradate"> 12 <!-- 如果自己配置属性name,age,则会替换从父对象继承的数据 --> 13 <property name="name" value="小明"/> 14 <property name="degree" value="学士"/> 15 </bean>
目前我们都是通过set方式给bean注入值,spring还提供其它的方式注入值,比如通过构造函数注入值!
通过构造函数注入值
1 beans.xml 关键代码: 2 <!-- 配置一个雇员对象 --> 3 <bean id="employee" class="com.hsp.constructor.Employee"> 4 <!-- 通过构造函数来注入属性值 --> 5 <constructor-arg index="0" type="java.lang.String" value="大明" /> 6 </bean>
自动装配bean的属性值
1 (1) byName的用法: 2 <!-- 配置一个master对象 --> 3 <bean id="master" class="com.hsp.autowire.Master" autowire="byName"> 4 <property name="name"> 5 <value>顺平</value> 6 </property> 7 </bean> 8 <!-- 配置dog对象 --> 9 <bean id="dog" class="com.hsp.autowire.Dog"> 10 <property name="name" value="小黄"/> 11 <property name="age" value="3"/> 12 </bean>
(1) byType: byType:寻找和属性类型相同的bean,找不到,装不上,找到多个抛异常。
(2) constructor: autowire="constructor"
说明 : 查找和bean的构造参数一致的一个或
多个bean,若找不到或找到多个,抛异常。按照参数的类型装配
(4) autodetect
说明 : autowire="autodetect"
(3)和(2)之间选一个方式。不确定
性的处理与(3)和(2)一致。
(5) defualt
这个需要在<beans defualt-autorwire=“指定” />
当你在<beans >指定了 default-atuowrite后, 所有的bean的 默认的autowire就是 指定的装配方法;
如果没有在<beans defualt-autorwire=“指定” /> 没有 defualt-autorwire=“指定” ,则默认是
defualt-autorwire=”no”
(6) no: 不自动装配