网站 数据库+1,有错误的wordpress,提供设计的的网站,网站建设礻金手指下拉十一spring 构造函数注入在运行时#xff0c;除非在启用了调试选项的情况下编译类#xff0c;否则Java类不会保留构造函数或方法参数的名称。 这对于Spring构造函数注入有一些有趣的含义。 考虑以下简单的类 package dbg;
public class Person {private final String first;pr… 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 nameaddress1 classdbg.Address p:street1street1 p:street2street1 p:statestate1/bean nameperson1 classdbg.Person c:address-refaddress1 c:lastLast1 c:firstFirst1 /beanbean nameperson2 classdbg.Person c:firstFirst2 c:address-refaddress1 c:lastLast2 /bean 在这里我使用c名称空间进行构造函数注入。 失败的原因是参数类型不明确-这是因为第一个参数是String并且由于其运行时表示中不存在参数名称因此Spring无法确定应使用名称还是姓氏代替它。 这种情况下有几个修复方法1.要使用基于索引的构造函数注入虽然缺点是非常冗长 bean nameperson1 classdbg.Person constructor-arg valueFirst1/constructor-argconstructor-arg valueLast1/constructor-argconstructor-arg refaddress1/constructor-arg/beanbean nameperson2 classdbg.Person constructor-arg valueFirst2/constructor-argconstructor-arg valueLast2/constructor-argconstructor-arg refaddress1/constructor-arg/bean 2.要使用调试符号进行编译可以通过向Java编译器传递-g或-gvar标志来完成–这将确保参数名称保留在类文件中并使用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.htmlspring 构造函数注入