spring心得5--构造器注入@设置控制@案例加注解剖析
2013-04-25 13:03
465 查看
1.设置引用空对象的情况
设置null:
<property name="barlist">
<null/>
</property>
这种设置多出在一个bean实例引用另一个bean实例对象时,想引人一个空对象应该像下面红色部分配置,而不应该像绿色部分那样,否则会出现一个异常错误,该异常错误见本人博客《错误汇总》第七条。
2.构造器注入
构造器注入是Set注入的替代;set注入是一种直接方式,缺点是它假设了所有的可变属性都可以通过set方法访问到。例如有些属性在创建时设置一次,以后不再改变。替代方式是通过构造函数设置一些属性值
set注入的缺点是无法清晰表达哪些属性是必须的,哪些是可选的,构造注入的优势是通过构造强制依赖关系,不可能实例化不完全的或无法使用的bean。
解决构造函数参数不确定性
构造函数多或参数类型大都相同该如何处理?
spring并不是按照参数的顺序来配置参数的。有三种方法来解决构造参数的不确定性:序号和类型,属性名字指明。<constructor-arg>有一个可选的index属性,可用来指定参数的顺序。
3.构造器案例剖析
配置文件
设置null:
<property name="barlist">
<null/>
</property>
这种设置多出在一个bean实例引用另一个bean实例对象时,想引人一个空对象应该像下面红色部分配置,而不应该像绿色部分那样,否则会出现一个异常错误,该异常错误见本人博客《错误汇总》第七条。
配置文件 <?xml version="1.0" encoding="UTF-8"?> <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"> <bean id="memberBean" class="www.csdn.spring.constructor.MemberBean"> <!-- value="null" 这里给value赋的是一个空字符串,而不是一个null空值 --> <property name="name" value="null"/> <property name="member"> <null/> </property> </bean> </beans> 测试类 package www.csdn.spring.constructor; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestMemberBean { @Test public void testBean(){ ApplicationContext context = new ClassPathXmlApplicationContext("spring-null.xml"); MemberBean member = context.getBean("memberBean",MemberBean.class); System.out.println(member.name); System.out.println(member.member); } }
2.构造器注入
构造器注入是Set注入的替代;set注入是一种直接方式,缺点是它假设了所有的可变属性都可以通过set方法访问到。例如有些属性在创建时设置一次,以后不再改变。替代方式是通过构造函数设置一些属性值
set注入的缺点是无法清晰表达哪些属性是必须的,哪些是可选的,构造注入的优势是通过构造强制依赖关系,不可能实例化不完全的或无法使用的bean。
解决构造函数参数不确定性
构造函数多或参数类型大都相同该如何处理?
spring并不是按照参数的顺序来配置参数的。有三种方法来解决构造参数的不确定性:序号和类型,属性名字指明。<constructor-arg>有一个可选的index属性,可用来指定参数的顺序。
3.构造器案例剖析
配置文件
<?xml version="1.0" encoding="UTF-8"?> <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"> <!-- 1、通过构造函数注入,采用默认配备方式注入值,这是最原始的方式 ,已由以下三种所代替 ;这里spring容器会去自动为你去匹配,但是会出现类型不匹配的错--> <bean id="employeeBean" class="www.csdn.spring.constructor.EmployeeBean"> <constructor-arg value="杨凯" /> <constructor-arg value="男" /> <constructor-arg value="5000" /> <constructor-arg ref="deptmentBean" /> </bean> <!-- 1、根据构造器参数的类型 ;这里需要注意的是类类型的需要加上包名指明,基本类型的不需要;特殊的注意的是这里不会自动拆箱装箱;bean实例使用的是基本类型这里就用基本类型注入, 使用额是基本类型对应的类类型就用加包名的类类型指明 --> <!-- <bean id="employeeBean" class="www.csdn.spring.constructor.EmployeeBean"> <constructor-arg type="java.lang.String" value="杨凯" /> <constructor-arg type="java.lang.String" value="男" /> <constructor-arg type="double" value="5000.00" /> <constructor-arg type="www.csdn.spring.constructor.DeptmentBean" ref="deptmentBean" /> </bean> --> <!-- 3、根据索引index注入 --> <!-- <bean id="employeeBean" class="www.csdn.spring.constructor.EmployeeBean"> <constructor-arg index="0" value="杨凯df"/> <constructor-arg index="1" value="男"/> <constructor-arg index="2" value="1000.00"/> <constructor-arg index="3" ref="deptmentBean"/> </bean> --> <!-- 4.根据属性名注入值,开发中最常用的一种构造器注入模式 --> <!-- <bean id="employeeBean" class="www.csdn.spring.constructor.EmployeeBean"> <constructor-arg name="name" value="杨凯" /> <constructor-arg name="sex" value="男" /> <constructor-arg name="salary" value="5000.00" /> <constructor-arg name="dept" ref="deptmentBean" /> </bean> --> <bean id="deptmentBean" class="www.csdn.spring.constructor.DeptmentBean"> <property name="name" value="开发部" /> <property name="deptNo" value="001" /> </bean> </beans> bean实例 package www.csdn.spring.constructor; publicclass EmployeeBean { private String name; private String sex; privatedoublesalary; private DeptmentBean dept; public EmployeeBean(String name, String sex, double salary, DeptmentBean dept) { super(); this.name = name; this.sex = sex; this.salary = salary; this.dept = dept; } @Override public String toString() { return"EmployeeBean [name=" + name + ", sex=" + sex + ", salary=" + salary + ", dept=" + dept + "]"; } } 辅助bean实例 package www.csdn.spring.constructor; publicclass DeptmentBean { private String name; private Integer deptNo; publicvoid setName(String name) { this.name = name; } publicvoid setDeptNo(Integer deptNo) { this.deptNo = deptNo; } @Override public String toString() { return"deptment [name=" + name + ", deptNo=" + deptNo + "]"; } } 测试类 package www.csdn.spring.constructor; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestEmployeeBean { @Test public void testBean(){ ApplicationContext context = new ClassPathXmlApplicationContext("spring-constructor.xml"); System.out.println(context.getBean("employeeBean",EmployeeBean.class).toString()); } }
相关文章推荐
- spring心得5--构造器注入@设置控制@案例加注解剖析
- Spring学习(1):控制反转(IoC)和依赖注入(DI)的详解以及注解(annotation)开发入门案例
- 剖析Spring自动注入中的注解
- 剖析Spring自动注入中的注解 jun转载
- Spring总结——控制反转,注入(配置和注解两种方式)
- Spring注入:配置注入(set注入和构造器注入)与注解注入
- spring注解设置名称注入还是类型注入
- Spring学习(1):控制反转(IoC)和依赖注入(DI)的详解以及注解(annotation)开发入门案例
- 从头认识Spring-2.4 基于java的标准注解装配-@Inject(3)-通过构造器方法注入
- 关于SpringMVC设置注解注入出现Servlet.init() for servlet springMVC threw exception 错误解决方式
- 深入探索spring技术内幕(四): 剖析@Resource注解实现原理与注解注入
- 深入探索spring技术内幕(四): 剖析@Resource注解实现原理与注解注入
- spring注解或依赖注入模拟MVC结构案例<五>
- Spring实现控制反转(IOC)的三种方式(二)——构造器注入
- Spring依赖注入方式_属性setter方法注入_构造器注入_注解注入
- 深入探索spring技术内幕(四): 剖析@Resource注解实现原理与注解注入
- 记录一下spring的设置注入 构造器注入
- spring心得4--setter注入集合(set、list、map、properties等多种集合,配有案例解析)@基本装(引用)
- 【JavaWeb-23】spring、IoC控制反转和DI依赖注入入门、基于XML的Bean装配、基于注解的Bean装配
- 剖析Spring自动注入中的注解