天天看點

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);
    }

}           
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);
    }
}           
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構造方法           
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;
    }
}
           
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 無參構造方法           

【雲栖号線上課堂】每天都有産品技術專家分享!

課程位址:

https://yqh.aliyun.com/live

立即加入社群,與專家面對面,及時了解課程最新動态!

【雲栖号線上課堂 社群】

https://c.tb.cn/F3.Z8gvnK

原文釋出時間:2020-06-28

本文作者:入門小站

本文來自:“

掘金

”,了解相關資訊可以關注“掘金”