當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring学习记录(九)---通过工厂方法配置bean
生活随笔
收集整理的這篇文章主要介紹了
Spring学习记录(九)---通过工厂方法配置bean
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?
1. 使用靜態(tài)工廠方法創(chuàng)建Bean,用到一個工廠類
例子:一個Car類,有brand和price屬性。
1 package com.guigu.spring.factory; 2 3 public class Car { 4 private String brand; 5 private double price; 6 7 public Car(){ 8 } 9 public Car(String brand,double price){ 10 this.brand=brand; 11 this.price=price; 12 } 13 public String getBrand() { 14 return brand; 15 } 16 public void setBrand(String brand) { 17 this.brand = brand; 18 } 19 public double getPrice() { 20 return price; 21 } 22 public void setPrice(double price) { 23 this.price = price; 24 } 25 @Override 26 public String toString() { 27 return "Car [brand=" + brand + "]"; 28 } 29 }?工廠類:
1 package com.guigu.spring.factory; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 public class StaticCarFactory { 7 8 private static Map<String,Car> cars=new HashMap<String,Car>(); 9 //靜態(tài)代碼塊,防止重復(fù)添加 10 static{ 11 cars.put("aodi", new Car("aodi",300000)); 12 cars.put("ford", new Car("ford",200000)); 13 } 14 //靜態(tài)工廠方法 15 public static Car getCar(String name){ 16 return cars.get(name); 17 } 18 }?
xml配置?
?
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans 3 xmlns="http://www.springframework.org/schema/beans" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xmlns:context="http://www.springframework.org/schema/context" 6 xsi:schemaLocation=" 7 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 8 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 9 <!-- 10 class屬性:指向靜態(tài)工廠方法的全類名,不是bean實例的實現(xiàn)類 11 factory-method:指向靜態(tài)工廠方法的名字,方法里面返回bean 12 constructor-arg:如果工廠方法需要傳入?yún)?shù),則用constructor-arg配置 13 14 --> 15 <bean id="car1" class="com.guigu.spring.factory" factory-method="getCar"> 16 <constructor-arg value="aodi"></constructor-arg> 17 </bean> 18 19 </beans>?main函數(shù)測試
?
1 public class main { 2 3 public static void main(String[] args) { 4 ApplicationContext ctx =new ClassPathXmlApplicationContext("bean-factory.xml"); 5 Car car1=(Car) ctx.getBean("car1"); 6 System.out.println(car1); 7 } 8 }?輸出:
?
這個過程中,spring不再自己創(chuàng)建bean實例,bean實例由用戶自己提供的工廠方法創(chuàng)建。靜態(tài)工廠方法,方法必須是靜態(tài)的
---------------------------------------
其實我還是不懂, 調(diào)用靜態(tài)方法
什么時候?qū)ars進(jìn)行初始化了?單單調(diào)用靜態(tài)方法并沒有執(zhí)行工廠類。望看觀指教
--------------------------------------
2. 實例工廠方法,工廠本身是實例,要實現(xiàn)創(chuàng)建工廠對象本身
?
1 /* 2 * 實例工廠方法:實例工廠的方法,即先需要創(chuàng)建工廠本身,再調(diào)用工廠的實例方法來返回bean的實例 3 * */ 4 public class InstanceCarFactory { 5 6 private Map<String,Car> cars=null; 7 8 public InstanceCarFactory(){ 9 cars = new HashMap<String, Car>(); 10 cars.put("aodi", new Car("aodi",300000)); 11 cars.put("ford", new Car("ford",400000)); 12 } 13 // 14 public Car getCar(String brand){ 15 return cars.get(brand); 16 } 17 }?
xml配置
1 <!--先配置工廠的實例--> 2 <bean id="carFactory" class="com.guigu.spring.factory"></bean> 3 <!-- 4 factory-bean屬性:指向?qū)嵗S方法的bean 5 method:指向靜態(tài)工廠方法的名字 6 constructor-arg:如果工廠方法需要傳入?yún)?shù),用constructor-arg配置 7 --> 8 <bean id="car2" factory-bean="carFactory" factory-method="getCar"> 9 <constructor-arg value="ford"></constructor-arg> 10 </bean>?
main函數(shù)
public class main {public static void main(String[] args) {ApplicationContext ctx =new ClassPathXmlApplicationContext("bean-factory.xml");Car car2 = (Car) ctx.getBean("car2");System.out.println(car2); } }?
輸出:
?這個好理解,先實例工廠,調(diào)用構(gòu)造函數(shù),然后bean調(diào)用工廠的方法。
?
?文章為學(xué)習(xí)記錄,若有錯誤,望指正
轉(zhuǎn)載于:https://www.cnblogs.com/ooooevan/p/5804784.html
總結(jié)
以上是生活随笔為你收集整理的Spring学习记录(九)---通过工厂方法配置bean的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker-创建一个mysql容器,并
- 下一篇: Spring-----多环境中加载资源配