请分别写出IOC静态工厂方法和实例工厂方法的配置
请说明一下IOC的静态工厂方法和实例工厂方法的区别?
-
静态工厂方法:工厂初始化之前,工厂中的类已经被实例化放在工厂容器中
-
实例工厂方法:工厂在构造方法初始化时,会将类进行实例化放在工厂中
创建实例类:
1 public class Car { 2 private double price; 3 private String brand; 4 5 public Car() { 6 System.out.println("cars...constractor"); 7 } 8 9 public Car(double price, String brand) { 10 super(); 11 this.price = price; 12 this.brand = brand; 13 } 14 15 public double getPrice() { 16 return price; 17 } 18 19 public void setPrice(double price) { 20 this.price = price; 21 } 22 23 public String getBrand() { 24 return brand; 25 } 26 27 public void setBrand(String brand) { 28 this.brand = brand; 29 } 30 31 @Override 32 public String toString() { 33 return "Car{" + 34 "price=" + price + 35 ", brand='" + brand + '\'' + 36 '}'; 37 } 38 }
创建实例工厂方法:即调用工厂本身,再调用工厂的实例方法来返回bean实例
1 public class InstanceCarFactory { 2 /** 3 * 实例工厂方法 4 */ 5 private Map<String,Car> cars = null; 6 public InstanceCarFactory(){ 7 cars = new HashMap<String, Car>(); 8 cars.put("audi",new Car(3000,"audi")); 9 cars.put("dffds" , new Car(3000,"audi")); 10 } 11 public Car getCar(String name){ 12 return cars.get(name); 13 } 14 }
创建静态工厂方法:直接调用静态方法可以返回Bean的实例
1 public class StaticCarFactory { 2 /** 3 * 静态工厂方法:直接调用静态方法可以返回bean的实例 4 */ 5 private static Map<String,Car> cars = new HashMap<String, Car>(); 6 static { 7 cars.put("audi" , new Car(3000,"aodi")); 8 cars.put("fodo",new Car(3000,"aodi")); 9 } 10 //静态工厂方法 11 public static Car getCar(String name){ 12 return cars.get(name); 13 } 14 15 }
配置文件:
<span style="font-size:14px;"><?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 通过静态方法来配置bean,注意不是配置静态工厂方法实例,而是配置bean实例--> <!--class属性:指向静态方法的全类名 factory-method:指向静态方法的名字 constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数--> <bean id="car1" factory-method="getCar" class="com.zhu.string.factory.StaticCarFactory"> <constructor-arg value="audi"></constructor-arg> </bean> <!-- 配置工厂的实例 --> <bean id="carFactory" class="com.zhu.string.factory.InstanceCarFactory"> </bean> <bean id="car2" factory-bean="carFactory" factory-method="getCar"> <constructor-arg value="audi"></constructor-arg> </bean> </beans>
</span>
分类:
Spring面试题
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· Blazor Hybrid适配到HarmonyOS系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库