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 { }

<?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>

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); } }
運行截圖:
靜態工廠實例化:
xml配置文件:
id唯一,class為工廠方法類,factory-method值為方法名,確定使用了工廠中的哪個方法。
靜態工廠類:
靜態方法返回一個Bean2對象。

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

package com.liu.instance.static_factory; /* * lsq * 2019-9-10 * Spring靜態工廠實例化 */ public class MyBean2Factory { //創建Bean2對象 public static Bean2 createBean2(){ return new Bean2(); } }

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

<?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>
運行截圖:
實例工廠實例化:
xml配置文件:
兩個bean第一個為靜態工廠,class為靜態工廠類。第二個為bean3,factory-method屬性配置實例工廠,factory-method確定使用工廠中哪個方法。
工廠類:
返回一個Bean3對象。
完整代碼:

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

<?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>

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

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")); } }
運行截圖:
三種方法區別: