美文网首页
Spring的FactoryBean接口

Spring的FactoryBean接口

作者: 守住阳光 | 来源:发表于2018-05-29 11:02 被阅读0次

一、FactoryBean简介

         Spring中有两种类型的Bean,一种是普通的Bean,另一种是工厂Bean,即FactoryBean,两种bean都被Spring容器管理,但工厂bean跟普通的bean不同,其返回的对象不是指定类的一个实例,而是实现了FactoryBean的类的getObject()方法所返回的对象。

二、什么时候使用 FactoryBean

         既然Spring提供了使用注解和Xml配置的方式来创建bean,那为什么还提供这种方式呢?这就是Spring框架的强大之处,即想你之未所想。如果一个bean的创建过程涉及很多其他的bean和复杂的逻辑,用xml配置比较困难,可以考虑使用FactoryBean。 在Spring框架内部,有很多地方有FactoryBean的实现类,它们在很多应用如(Spring的AOP、ORM、事务管理)及与其它第三框架(ehCache)集成时都有体现。

三、 FactoryBean使用

         1、定义Student类,属性包括name,sex,age 。

         public class Student {

                private String name ;

                private String sex ;

                private int age = 10 ;

                public String getName() {

                          return name;

               }

                public void setName(String name) {

                          this.name = name;

                }

                public String getSex() {

                         return sex;

                }

                public void setSex(String sex) {

                        this.sex = sex;

                }

                public int getAge() {

                        return age;

                }

                public void setAge(int age) {

                        this.age = age;

                }

        }

       2、定义StudentFactoryBean实现FactoryBean接口

        @Component

        public class StudentFacotryBean implements FactoryBean{

        @Override

         public Student getObject() throws Exception {

            Student student = new Student();

            student.setName("nihaiopp");

            return student;

        }

        @Override

        public Class getObjectType() {

            return Student.class;

        }

        @Override

        public boolean isSingleton() {

                return true;

        }

     }

    实现FactoryBean接口需要重写三个方法:

    getObject():需要返回的交给Spring管理的实例对象;

    getObjectType():要返回对象的class对象;

    isSingleton():是否是单例。

    3、测试结果

    @Test

    public void testGetClass() {

    try{

            ApplicationContext applicationContext = SpringContextUtil.getApplicationContext();

            Student student = (Student)applicationContext.getBean("studentFacotryBean");

             System.out.println(student.getName());

             }catch(Exception e){

                    e.printStackTrace();

            }

        结果返回:nihaiopp

相关文章

网友评论

      本文标题:Spring的FactoryBean接口

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