Spring實例化Bean三種方法:構造器、靜態工廠、實例工廠


Spring中Bean相當於java中的類,可以通過xml文件對bean進行配置和管理。

一、Bean的實例化:

構造器實例化、靜態工廠實例化、實例工廠方式實例化。

目錄:

構造器實例化:

xml配置文件:

 

id唯一,calss指定Bean具體實現類,必須是完整的類名,可以在Bean1.java文件中右擊“public class Bean1”中的Bean1,選中Copy Qualifiel Name得到。注意這里用"."分隔。

測試函數:

測試函數中首先定義xml配置文件的路徑,可以在目錄視圖中右鍵選中Copy Qualifiel Name得到,注意這里從com開始,因為是路徑所以用/隔開。

然后加載配置文件對Bean進行實例化,在通過getBean函數獲得指定id的實例對象,注意類型轉換。

完整代碼:

package com.liu.instance.contructor;

public class Bean1 {

}
Bean1.java
<?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
        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
    <bean id="bean1" class="com.liu.instance.contructor.Bean1"></bean>
</beans>
beans1.xml
package com.liu.instance.contructor;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class InstanceTest {

    public static void main(String[] args) {
        //定義配置文件路徑
        String xmlPath = "com/liu/instance/contructor/beans1.xml";
        //ApplicationContext 加載配置文件時對Bean進行實例化。
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
        //配置文件的id確定是哪個bean,在通過class找到java文件創建對象。
        Bean1 bean1 = (Bean1) applicationContext.getBean("bean1");
        System.out.println(bean1);
        
    
    }
}
InstanceTest.java

運行截圖:

 

靜態工廠實例化:

xml配置文件:

id唯一,class為工廠方法類,factory-method值為方法名,確定使用了工廠中的哪個方法。

靜態工廠類:

 靜態方法返回一個Bean2對象。

package com.liu.instance.static_factory;
/*
 * lsq
 * 2019-9-10
 * Spring靜態工廠實例化被實例化的類Bean2
 */
public class Bean2 {

}
Bean2.java
package com.liu.instance.static_factory;
/*
 * lsq
 * 2019-9-10
 * Spring靜態工廠實例化
 */

public class MyBean2Factory {

    //創建Bean2對象
    public static Bean2 createBean2(){
        return new Bean2();
    }
}
MyBean2Factory.java
package com.liu.instance.static_factory;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/*
 * lsq
 * 2019-9-10
 * Spring靜態工廠實例化對象測試類
 */
public class InstanceTest {

    public static void main(String[] agrs){
        //定義配置文件路徑
        String xmlPath = "com/liu/instance/static_factory/beans2.xml";
        //實例化對象
        ApplicationContext ApplicationContext = new ClassPathXmlApplicationContext(xmlPath);
        //調用函數
        //getBean函數傳入id屬性值獲取對象
        System.out.println(ApplicationContext.getBean("bean2"));
    }
}
InstanceTest.java
<?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
        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">


    <bean id="bean2" class="com.liu.instance.static_factory.MyBean2Factory"
        factory-method="createBean2">
    </bean>
</beans>
beans2.xml

 運行截圖: 

 

實例工廠實例化:

xml配置文件:

 兩個bean第一個為靜態工廠,class為靜態工廠類。第二個為bean3,factory-method屬性配置實例工廠,factory-method確定使用工廠中哪個方法。

工廠類:

 返回一個Bean3對象。

完整代碼:

package com.liu.instance.factory;
/*
 * lsq
 * 2019-9-10
 * Spring工廠實例化對象
 */
public class Bean3 {

}
Bean3.java
<?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
        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">


    <bean id="bean2" class="com.liu.instance.static_factory.MyBean2Factory"
        factory-method="createBean2">
    </bean>
</beans>
bean3.xml
package com.liu.instance.factory;
/*
 * lsq
 * 2019-9-10
 * Spring工廠實例化對象
 */
public class MyBean3Factory {

    public MyBean3Factory(){
        System.out.println("Bean3工廠實例化中。。。");
    }
    public Bean3 createBean3(){
        return new Bean3();
    }
}
MyBean3Factory.java
package com.liu.instance.factory;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/*
 * lsq
 * 2019-9-10
 * Spring工廠實例化測試類
 */
public class InstanceTest3 {

    public static void main(String[]args){
        //指定配置文件路徑
        String xmlPath= "com/liu/instance/factory/bean3.xml";
        //ApplicationContext加載配置文件時,對Bean進行實例化
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
        
        System.out.println(applicationContext.getBean("bean3"));
    }
}
InstanceTest3.java

運行截圖:

 

三種方法區別:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM