spring 构造函数注入_Spring构造函数注入和参数名称
spring 构造函数注入
在运行时,除非在启用了调试选项的情况下编译类,否则Java类不会保留构造函数或方法参数的名称。
这对于Spring构造函数注入有一些有趣的含义。
考虑以下简单的类
package dbg;
public class Person {private final String first;private final String last;private final Address address;public Person(String first, String last, Address address){this.first = first;this.last = last;this.address = address;}public String getFirst() {return first;}public String getLast() {return last;}public Address getAddress() {return address;}
}
和一个示例Spring bean配置xml文件:
<bean name='address1' class='dbg.Address' p:street1='street1' p:street2='street1' p:state='state1'/><bean name='person1' class='dbg.Person' c:address-ref='address1' c:last='Last1' c:first='First1' ></bean><bean name='person2' class='dbg.Person' c:first='First2' c:address-ref='address1' c:last='Last2' ></bean>
在这里,我使用c名称空间进行构造函数注入。 失败的原因是参数类型不明确-这是因为第一个参数是String,并且由于其运行时表示中不存在参数名称,因此Spring无法确定应使用名称还是姓氏代替它。 这种情况下有几个修复方法:1.要使用基于索引的构造函数注入,虽然缺点是非常冗长:
<bean name='person1' class='dbg.Person' ><constructor-arg value='First1'></constructor-arg><constructor-arg value='Last1'></constructor-arg><constructor-arg ref='address1'></constructor-arg></bean><bean name='person2' class='dbg.Person' ><constructor-arg value='First2'></constructor-arg><constructor-arg value='Last2'></constructor-arg><constructor-arg ref='address1'></constructor-arg></bean>
2.要使用调试符号进行编译,可以通过向Java编译器传递-g或-g:var标志来完成–这将确保参数名称保留在类文件中,并使用c保留原始的简洁bean配置。名称空间将起作用。 3.巧妙的解决方法是使用@ConstructorProperties注释构造函数,该结构基本上为Spring提供参数名称:
public class Person {private final String first;private final String last;private final Address address;@ConstructorProperties({'first','last','address'})public Person(String first, String last, Address address){this.first = first;this.last = last;this.address = address;}
无论打开或不打开调试选项,此功能都可以使用。 4.可能最好的解决方法是简单地使用@Configuration定义bean:
@Configuration
public static class TestConfiguration{@Beanpublic Address address1(){return new Address();}@Beanpublic Person person1(){return new Person('First1', 'Last1', address1());}@Beanpublic Person person2(){return new Person('First2', 'Last2', address1());}}
参考: all和其他博客中来自JCG合作伙伴 Biju Kunjummen的Spring构造函数注入和参数名称 。
翻译自: https://www.javacodegeeks.com/2012/10/spring-constructor-injection-and-argument-names.html
spring 构造函数注入
spring 构造函数注入_Spring构造函数注入和参数名称相关推荐
- spring 构造函数注入_Spring依赖注入–字段vs设置器vs构造函数注入
spring 构造函数注入 欢迎使用Spring Dependency Injection –字段,设置器,构造函数注入教程. 了解场注入 , 二传手注入和构造函数注入之间的区别. 借助代码示例,我们 ...
- java应用中spring自动注入_Spring自动注入的几种方式
---恢复内容开始--- @Service("accountEmailService") public class AccountEmailServiceImpl implemen ...
- spring依赖注入_Spring依赖注入
spring依赖注入 介绍: 在设计良好的Java应用程序中,这些类应尽可能独立. 这样的设计提高了组件的可重用性. 它还使对各个组件进行单元测试变得更加容易. 依赖注入的概念促进了Java对象之间的 ...
- spring依赖注入_Spring依赖注入技术的发展
spring依赖注入 回顾Spring框架的历史,您会发现在每个发行版中实现依赖注入的方法越来越多. 如果您使用该框架已经超过一个月,那么在这篇回顾性文章中可能不会发现任何有趣的东西. 除了Scala ...
- spring 构造函数注入_Spring构造函数依赖注入示例
spring 构造函数注入 欢迎使用Spring构造函数依赖注入示例指南. 基于构造器的依赖注入是Spring 依赖注入的一种 . 依赖注入的另一种类型是Setter注入和字段注入. 有关Spring ...
- Spring构造函数注入和参数名称
在运行时,除非在启用了调试选项的情况下编译类,否则Java类不会保留构造函数或方法参数的名称. 这对于Spring构造函数注入有一些有趣的含义. 考虑以下简单的类 package dbg; publi ...
- 踩坑:Spring静态变量/构造函数注入失败(注入为null)问题的解决方案
1.案例1:Spring对静态变量的注入为空 案例代码如下: @Component public class HelloWorld {/*** 错误案例:这种方式是不能给静态变量注入属性值的*/@Va ...
- spring依赖注入_Spring的依赖注入陷阱
spring依赖注入 Spring框架中有三种注入变量: 基于二传手的注射 基于构造函数的注入 基于现场的注入 这些机制中的每一种都有优点和缺点,并且不仅只有一种正确的方法. 例如现场注入: @Aut ...
- spring 依赖注入_Spring从入门到入土——依赖注入(DI)
Dependency Injection 概念 依赖注入(DI) 依赖:指Bean对象的创建依赖于容器.Bean对象的依赖资源 注入:指Bean对象 注入方式 一共有三种:分别是构造器注入:Set注入 ...
最新文章
- c语言英文字符转数字,C语言常用数字和字符串转换函数(国外英文资料).doc
- html tfoot标签,HTML tfoot 标签
- CUDA error: an illegal memory access was encountered
- android wifi动画显示,android动态配置Wifi信息
- python控制台输出到文件_Python print 立即打印内容到重定向的文件
- C#使用事件方式Winform窗体之间传值
- spark.mllib:回归算法
- Java数组排序解码
- 嗅探TFTP配置文件传输
- 厉害了!20年【科比NBA】生涯|数据分析
- 二层、三层与四层交换机
- Ansible最佳实践之委派任务和事实
- 怎么注册微软云服务器,如何创建和部署云服务(经典) | Microsoft Docs
- SQL server学习日志(二)创建表!手把手教你创建表,修改表,了解数据类型!超详细!
- 微信APP支付之IJpay的使用
- oracle 序列和表关联,Oracle 创建和管理表、集群和序列
- 苹果电脑装双系统Parallels Desktop虚拟机你需要知道,是否适合装虚拟机?
- 控制工程中的数学建模(3)——自动控制系统的一般模型
- C语言实现,输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
- Qt TCP文件传输工具 源码分享