使用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的全路径的名字

posted on 2018-03-16 00:05  学习spring是我必须的  阅读(324)  评论(0编辑  收藏  举报