SpringBoot 使用策略+工厂模式的几种实现方式
1. 方式一:
2.方式二: 使用Spring依赖注入
用过 Spring 的肯定也离不开这个注解,通过这个注解可以帮我们自动注入我们想要的 Bean。
除了这个基本功能之外, @Autowired 还有更加强大的功能,还可以注入指定类型的数组,List/Set 集合,甚至还可以是 Map 对象。
1 @Component 2 public class ProductStrategyFactory { 3 4 /** 5 * 使用依赖注入引入 ProductService 产品实现类,以Bean名称作为 Map 的 Key,以 Bean 实现类作为 Value 6 */ 7 @Autowired 8 private Map<String, ProductService> strategyMap = new ConcurrentHashMap<>(2); 9 10 /** 11 * 查找对应的产品的处理策略 12 * 13 * @param productName 产品名称 14 * @return 对应的产品订购逻辑实现策略 15 */ 16 public ProductService getProductStrategy(String productName) { 17 return strategyMap.get(productName); 18 } 19 20 }
二、使用ApplicationContextAware
ApplicationContextAware的作用是获取当前应用上下文
核心使用的是 ApplicationContext.getBeansOfType(classType)方法,获取接口 classType 的所有子类实例
1 @Component 2 public class RoleValidatorFactory implements ApplicationContextAware { 3 private static Map<RoleCodeEnum, RoleValidator> builderMap = new HashMap<>(); 4 5 @Override 6 public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 7 for (RoleValidator roleValidator : applicationContext.getBeansOfType(RoleValidator.class).values()) { 8 builderMap.put(roleValidator.source(), roleValidator); 9 } 10 } 11 public static RoleValidator getRoleValidator(RoleCodeEnum role) { 12 return builderMap.get(role); 13 } 14 }
三、使用Spring依赖注入
用过 Spring 的肯定都知道,通过@Autowired这个注解可以帮我们自动注入我们想要的 Bean。
除了这个基本功能之外, @Autowired 还有更加强大的功能,还可以注入指定类型的数组,List/Set 集合,甚至还可以是 Map 对象。知道了这个功能,当我们需要使用 Spring 实现策略模式就非常简单。
标签:Map,SpringBoot,Autowired,Spring,工厂,Bean,几种,public,注入 From: https://www.cnblogs.com/hld123/p/18354538