1.设置引用空对象的情况

设置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/beanshttp://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 {@Testpublic 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/beanshttp://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;}@Overridepublic 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;}@Overridepublic 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 {@Testpublic void testBean(){ApplicationContext context = new ClassPathXmlApplicationContext("spring-constructor.xml");System.out.println(context.getBean("employeeBean",EmployeeBean.class).toString());}}

转载于:https://www.cnblogs.com/yangkai-cn/archive/2013/04/25/4016891.html

spring心得5--构造器注入@设置控制@案例加注解剖析相关推荐

  1. Spring为什么建议构造器注入?

    以下文章来源方志朋的博客,回复"666"获面试宝典 来源:https://juejin.cn/post/6844904056230690824 前言 本章的内容主要是想探讨我们在进 ...

  2. 深度分析Spring中的构造器注入

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/z69183787/article/details/108902510 1. 示例 先来看一个例子,看看什么是构造器注入. 这里 ...

  3. 对不起,我就是喜欢问你Spring构造器注入原理

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:这样配置:让你的 IDEA 好用到飞起来文章转自:码农沉思录 我的小站:个人小站,欢迎小憩 作者:Static_ ...

  4. @Autowired注入、构造器注入、setter注入的使用方式?区别?

    文章目录 三种注入方式的使用 1.@Autowired注入(不推荐) 2.1.构造器注入(推荐) 2.2.构造器注入-lombok升级版(推荐) 3.setter注入 循环依赖问题如何解决? 注入方式 ...

  5. 权限控制案例(细粒度)

    权限控制案例 利用注解和动态代理来完成权限控制的功能 案例实现分析    * 创建数据库表    * 对应数据库表,创建JavaBean    * 导入必要的Jar包    * 完成用户登录逻辑.功能 ...

  6. spring:setter注入构造器注入注解注入

    一.内容回顾 简述对spring框架的了解 优点 高内聚低耦合 可拔插式设计模式 XML配置 便于维护 Sping 可以和各大优秀的框架很好结合(Struts2 springmvc mybatis h ...

  7. Spring 构造器注入

    构造函数注入是除属性注入之外的另一种常用的注入方式 构造函数注入的方法: 在类中,可以不用为属性设置setter方法,但是必须要生成该类带参数的构造方法. 在配置文件中配置该类的bean,并配置构造器 ...

  8. Spring官方为什么建议构造器注入?

    以下文章来源方志朋的博客,回复"666"获面试宝典 前言 本章的内容主要是想探讨我们在进行 Spring 开发过程当中,关于依赖注入的几个知识点.感兴趣的读者可以先看下以下问题: ...

  9. Spring依赖注入和控制反转

    文章目录 1.依赖注入 1.1.依赖注入和控制反转的概念 1.2.依赖注入的实现方式 1.3.控制反转的具体实现 1.4.依赖注入的具体实现 1.5.依赖注入和控制反转总结 1.依赖注入 1.1.依赖 ...

最新文章

  1. 架构设计开发方式汇总
  2. plsql 参数中in out in的区别讲解
  3. 病毒周报(100719至100725)
  4. OpenGL绘制一个三角形
  5. 卧槽!手机上竟然也能用Win10...
  6. 关于范数与正则化详解(转)
  7. C语言学习笔记---时间函数clock()和time()
  8. C++字符串(string/to_string/append/substr/length/find/rfind/replace/stoi转数字转int)
  9. think php5目录结构,目录结构 · ThinkPHP5.1完全开发手册 · 看云
  10. std::kill_dependency
  11. 肝主筋,肾主骨,脾主肉,心主脉,肺主皮毛
  12. CC3200学习——blinky资料
  13. git 解决悬空文件问题
  14. 纯干货:Linux抓包命令集锦
  15. isb 汇编_DSB,ISB,DMB指令
  16. INFO Starting development server...98% after emitting CopyPlugin ERROR Failed to compile with
  17. nds运行java_NDS看漫画软件 Comic Book DS 1.0 正式版!
  18. Navicat迁移表数据 一
  19. 问,你的算法复习计划是什么?
  20. 大数据学习路线-入门精简

热门文章

  1. ACM新手之八大输入输出格式
  2. 大型网站架构模式之一
  3. 剑指offer六:旋转数组的最小数字
  4. 02-CSS基础与进阶-day10_2018-09-14-20-38-10
  5. react篇章-React 组件-向组件传递参数
  6. Hystrix使用Commond的三种方式
  7. 2.14 文件和目录权限chmod
  8. 一道有意思的css面试题,9宫格
  9. 【转】C#中的线程 入门
  10. jquery上传图片