美文网首页
利用静态工厂方法来配置bean

利用静态工厂方法来配置bean

作者: 小竹猫 | 来源:发表于2018-12-21 15:40 被阅读0次

    创建实体类Person

    public class Person {
    
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            System.out.println("我是person的setter方法。。。");
            this.name = name;
        }
    
        public Person() {
            super();
            // TODO Auto-generated constructor stub
            System.out.println("我是person的构造器...");
        }
        
        
        
        public Person(String name) {
            super();
            this.name = name;
        }
    
        @Override
        public String toString() {
            return "Person [name=" + name + "]";
        }
        
        public void init(){
            System.out.println("我是初始化bean方法。");
        }
        
        public void destroy(){
            System.out.println("我是销毁方法。");
        }
        
    }
    

    再创建一个名为PersonFactoryBean的接口实现类

    public class PersonFactoryBean implements FactoryBean<Person> {
        private String name;
    
        public void setName(String name) {
            this.name = name;
        }
    
        //当前工厂要生产的对象
        @Override
        public Person getObject() throws Exception {
            // TODO Auto-generated method stub
            System.out.println("1");
            return new Person(name);
        }
    
        @Override
        public Class<?> getObjectType() {
            // TODO Auto-generated method stub
            System.out.println("2");
            return Person.class;
        }
    
        @Override
        public boolean isSingleton() {
            // TODO Auto-generated method stub
            System.out.println("3");
            return false;
        }
        
        //当前工厂要生产的对象
        
    }
    

    创建类来生产对象

    public class InstanceFactory {
        /*
         * 类变量  static 修饰的变量. 类名.直接调用的
         * 
         * 实例(对象)变量
         * */
        
        private Map<String,Person>persons= null;
        
        public InstanceFactory(){
            persons = new HashMap<String,Person>();
            persons.put("haha",new Person("haha"));
            persons.put("xixi", new Person("xixi"));
        }
        
        public Person getPerson(String name){
            return persons.get(name);
        }
    }
    
    public class StaticFactory {
        private static Map<String,Person>persons=new HashMap<String,Person>();
        
        //返回对象.
        static{
            persons.put("tom", new Person("汤姆"));
            persons.put("jack", new Person("杰克"));
        }
        
        public static Person getInstance(String name){
            return persons.get(name);
        }
    }
    

    在beans.xml中配置bean

    <!-- 静态工厂方法  来配置bean ... 配置的bean不是工厂本身   而是工厂产生的对象. 
            class 指向静态工厂
            factory-method 需要指向工厂方法
            constructor-arg 向工厂方法传参
        -->
        <bean id="tom" class="com.igeek.lesson11.StaticFactory" factory-method="getInstance">
            <constructor-arg value="jack"></constructor-arg>
        </bean>
    
        <bean id="instanceFactory" class="com.igeek.lesson11.InstanceFactory"></bean>
        <bean id="xixi" factory-bean="instanceFactory" factory-method="getPerson">
            <constructor-arg value="xixi"></constructor-arg>
        </bean>
        
        <!-- factoyBean -->
        <bean id="pp" class="com.igeek.lesson11.PersonFactoryBean">
            <property name="name" value="李小花"></property>
        </bean>
    </beans>
    

    在MainTest中获取bean

    public static void main(String[] args) {
            ApplicationContext ac = new ClassPathXmlApplicationContext("com/igeek/lesson11/beans.xml");
            Person bean = (Person)ac.getBean("pp");
            System.out.println(bean);
        }
    

    输出结果:

    3
    3
    1
    Person [name=李小花]

    相关文章

      网友评论

          本文标题:利用静态工厂方法来配置bean

          本文链接:https://www.haomeiwen.com/subject/aqimkqtx.html