Spring的FactoryBean接口

一、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 Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,009评论 19 139
  • 1.1 spring IoC容器和beans的简介 Spring 框架的最核心基础的功能是IoC(控制反转)容器,...
    simoscode阅读 6,753评论 2 22
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,600评论 1 92
  • 乏味的日子 上班,吃饭,睡觉 白开水一样 乏味的日子中 减肥 是女人一生的事业 不厌其烦的阅读各种减肥资料 放弃了...
    聆听幸福668阅读 664评论 0 0
  • 空白的人生
    哈喽小迷弟阅读 348评论 1 0