使用FieldRetrievingFactoryBean来获取静态字段
1.需求:当我们需要获取一个类的静态的字段作为bean 的时候,我们怎么办??
如:获取User两个静态字段作为一个bean使用
package ls.entity; /** * User class * @author liusheng */ public class User { /** * name */ private String name; /** * age */ private Integer age; public User() { } public static User tongren=new User("桐人",19); public static User yasina=new User("亚丝娜",19); public User(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String toString() { return "User [name=" + name + ", age=" + age + "]"; } }
那么就用spring为我们为提供一个类FieldRetrievingFactoryBean为我们获取静态属性
<bean class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean" name="Staticfield"> <property name="staticField" value="ls.entity.User.tongren"></property> </bean>
Test:
package liusheng.springboot.Spring; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import ls.entity.User; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class FieldRetrievingFactoryBeanTest { @Autowired @Qualifier(value="Staticfield") private User user; @Test public void test() throws Exception { System.out.println(user); } }
结果:
还有一种方式:
<bean name="ls.entity.User.tongren" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean" />
bean的名字是:这个字段的全限定名字,不过有个缺点,就是bean的name属性的值特别长
还有一种使用util:作为前缀的xml配置方式
<util:constant static-field="ls.entity.User.tongren" id="abc"/>
如果配置了id属性 ,那么取值的值用 id的值,如果没有配置 那么还是用static-field的全路径的名字