zoukankan      html  css  js  c++  java
  • 阿里面试官:小伙子,你给我说一下Spring Bean初始化的几种常规方式吧

    前言

    通过构造方法实例化
    通过静态工厂实例化
    通过实例工厂实例化
    通过FactoryBean实例化

    RumenzA实体类

    package com.rumenz;
    public class RumenzA {
    
        private String id;
        private String name;
        
        public static RumenzA createRumenzA(){
            RumenzA rumenzA=new RumenzA();
            rumenzA.setId("123");
            rumenzA.setName("入门小站");
            return rumenzA;
        }
        
        public  RumenzA() {
            System.out.println("RumenzA 无参构造方法");
        }
        public RumenzA(String id) {
            this.id = id;
            System.out.println("ID构造方法");
        }
        // set get省略
    }
    

      

    构造方法

    beans.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="rumenz" class="com.rumenz.RumenzA" />
    <bean id="rumenz1" class="com.rumenz.RumenzA">
         <constructor-arg name="id" value="1"/>
    </bean>
    </beans>
    

      

    DemoApplication.java

    package com.rumenz;
    
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    public class DemoApplication {
        public static  void main(String[] args) {
            ClassPathXmlApplicationContext  ca=new ClassPathXmlApplicationContext("beans.xml");
            RumenzA rumenzA=(RumenzA)ca.getBean("rumenz");
        }
    
    }
    

      

    输出

    xxx.DefaultListableBeanFactory - Creating shared instance of singleton bean 'rumenz'
    RumenzA 无参构造方法
    xxx.DefaultListableBeanFactory - Creating shared instance of singleton bean 'rumenz1'
    ID构造方法
    

      

    静态工厂

    beans.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <bean id="rFactory" class="com.rumenz.RumenzFactory" factory-method="rumenzFactory"/>
    <bean id="rFactory1" class="com.rumenz.RumenzFactory" factory-method="rumenzFactory">
        <constructor-arg name="id" value="111"/>
    </bean>
    </beans>
    

      

    RumenzFactory工厂类

    package com.rumenz;
    public class RumenzFactory {
        
        //静态方法
        public static RumenzA rumenzFactory(){
            return new RumenzA();
        }
        public static RumenzA rumenzFactory(String id){
            return new RumenzA(id);
        }
    
    }
    

      

    DemoApplication.java

    package com.rumenz;
    
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    public class DemoApplication {
        public static  void main(String[] args) {
            ClassPathXmlApplicationContext  ca=new ClassPathXmlApplicationContext("beans.xml");
        }
    
    }
    

      

    输出

    xxx.DefaultListableBeanFactory - Creating shared instance of singleton bean 'rFactory'
    RumenzA 无参构造方法
    xxx.DefaultListableBeanFactory - Creating shared instance of singleton bean 'rFactory1'
    ID构造方法
    

      

    实例工厂实例化

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd">
        <bean  id="rFactory" class="com.rumenz.RumenzFactory" />
        <bean id="rumenz" factory-bean="rFactory" factory-method="rumenzFactory"></bean>
        <bean id="rumenz1" factory-bean="rFactory" factory-method="rumenzFactory">
            <constructor-arg name="id" value="666"></constructor-arg>
        </bean>
    </beans>
    

      

    RumenzFactory.java

    package com.rumenz;
    public class RumenzFactory {
        //不能用静态方法
        public  RumenzA rumenzFactory(){
            return new RumenzA();
        }
        public  RumenzA rumenzFactory(String id){
            return new RumenzA(id);
        }
    }
    

      

    DemoApplication.java

    package com.rumenz;
    
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    public class DemoApplication {
        public static  void main(String[] args) {
            ClassPathXmlApplicationContext  ca=new ClassPathXmlApplicationContext("beans.xml");
            //RumenzA rumenzA=(RumenzA)ca.getBean("rFactory1");
        }
    
    }
    

      

    输出

    xxx.DefaultListableBeanFactory - Creating shared instance of singleton bean 'rumenz'
    RumenzA 无参构造方法
    xxx.DefaultListableBeanFactory - Creating shared instance of singleton bean 'rumenz1'
    ID构造方法
    

      

    通过FactoryBean实例化

    beans.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd">
        
        <bean id="rumenz-by-factoryBean"  class="com.rumenz.RumenzAFactoryBean"/>
    </beans>
    

      

    RumenzAFactoryBean.java

    package com.rumenz;
    
    import org.springframework.beans.factory.FactoryBean;
    
    public class RumenzAFactoryBean implements FactoryBean {
        @Override
        public Object getObject() throws Exception {
            return RumenzA.createRumenzA();
        }
        @Override
        public Class<?> getObjectType() {
            return RumenzA.class;
        }
    }
    

      

    DemoApplication.java

    package com.rumenz;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    public class DemoApplication {
        public static  void main(String[] args) {
            ClassPathXmlApplicationContext  ca=new ClassPathXmlApplicationContext("beans.xml");
            RumenzA rumenzA=(RumenzA)ca.getBean("rumenz-by-factoryBean");
        }
    
    }
    

      

    输出/异步加载bean

    xxx.DefaultListableBeanFactory - Creating shared instance of singleton bean 'rumenz-by-factoryBean'
    RumenzA 无参构造方法
    

      

    最后

    大家看完有什么不懂的可以在下方留言讨论,也可以关注我私信问我,我看到后都会回答的。也欢迎大家关注我的公众号:前程有光,金三银四跳槽面试季,整理了1000多道将近500多页pdf文档的Java面试题资料,文章都会在里面更新,整理的资料也会放在里面。谢谢你的观看,觉得文章对你有帮助的话记得关注我点个赞支持一下!

  • 相关阅读:
    Sqlserver 实际开发中表变量的用法
    Python Day 20 面向对象 (面向对象的组合用法,面向对象的三大特性
    Python Day 19 面向对象(初识面向对象)
    Python Day 18 常用模块(模块和包)
    Python Day 17 常用模块(常用模块一 时间模块,random模块,os模块,sys模块,序列化模块)
    Python Day 15 函数(递归函数、二分查找算法)
    Python Day 14 函数(内置函数,匿名函数(lambda表达式))
    Python Day 13 函数(迭代器,生成器,列表推导式,生成器表达式)
    Python Day 11 + Python Day 12 函数(函数名的应用,闭包,装饰器)
    Python Day 10 函数(名称空间,作用域,作用域链,加载顺序等; 函数的嵌套 global,nonlocal)
  • 原文地址:https://www.cnblogs.com/lwh1019/p/13347639.html
Copyright © 2011-2022 走看看