一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 通過工廠模式返回Spring Bean方法解析

通過工廠模式返回Spring Bean方法解析

2020-09-17 23:54賈樹丙 Java教程

這篇文章主要介紹了通過工廠模式返回Spring Bean方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

工廠返回的可以是一個具體的對象,比如造一輛車,可以返回一個自行車對象,或者汽車對象。

但是在Spring 中需要工廠返回一個具體的Service,這就是一個抽象工廠了

一種方法是反射,個人覺得這種方式不好;

還有一種方法是巧妙的使用Map對象,工廠的一個優點就是可擴展,對于這種方式可以說是體現的淋漓盡致了,可以定義多個map,map里也可以擴充

假設現在有一個接口類:BingService

以及實現了這個接口的兩個實現類: OneBingServiceImpl,TwoBingServiceImpl

1、在工廠類里定義Map

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.Map;
public class BingServiceFactory {
  //Map中的Value是 ServiceBean
  private Map<String, BingService> serviceMap;
  //返回對應的 Service
  public BingService getBingService(String platform) {
    return serviceMap.get(platform);
  }
  public Map<String, BingService> getServiceMap() {
    return serviceMap;
  }
  public void setServiceMap(Map<String, BingService> serviceMap) {
    this.serviceMap = serviceMap;
  }
}

2、是用注解方式,配置工廠,同時使用set 注入的方法,給用到工廠的bean來set一下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
 
@Configuration
public class BingConfiguration {
  @Resource
  private OneServiceImpl oneService;
 
  @Resource
  private TwoServiceImpl twoService;
 
  @Resource
  private TestServiceImpl testService;
 
  @Bean
  public BingServiceFactory createFactory() {
    BingServiceFactory factory = new BingServiceFactory();
 
    Map<String, BingService> serviceMap = new HashMap<>();
    serviceMap.put("One",oneService);
    serviceMap.put("Two",twoService);
    factory.setServiceMap(serviceMap);
    testService.setFactory(factory);
    return factory;
  }
}

@Bean 注解如果無效的話,可能得 @Bean("xxxxServiceFactory") 這樣的

3、使用set 注入的方方式來獲取工廠(當然也可以使用Autowired 注解注入)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import org.springframework.stereotype.Component;
@Component
public class TestServiceImpl {
  private BingServiceFactory factory;
  public void test() {
    BingService service = factory.getBingService("One");
  }
  public BingServiceFactory getFactory() {
    return factory;
  }
  public void setFactory(BingServiceFactory factory) {
    this.factory = factory;
  }
}

這個工廠可以優化的,不要Factory 這個類,直接使用Map 就行

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/acm-bingzi/p/spring_factory.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 四虎国产精品免费久久久 | 校服下的白嫩小乳尖h1v1 | 亚洲男人天堂a | 免费观看a毛片一区二区不卡 | 国产毛片在线观看 | 免费激情小视频 | 俄罗斯海滩厕所偷窥 | 亚洲精品国产一区二区第一页 | 国产精品永久免费自在线观看 | 丝袜性爱 | 日本一区免费观看 | 精品亚洲午夜久久久久 | 精品国产欧美精品v | 亚洲国产精品第一区二区三区 | 亚洲 欧美 国产 综合 播放 | 好吊色网站 | 国产精品自拍一区 | 国内精品自产拍在线观看91 | 2018天天弄| chanelpreston欧美网站| 99在线精品免费视频九九视 | 亚洲精品电影天堂网 | 亚飞与亚基高清国语在线观看 | 国产一二在线观看视频网站 | 91影视永久福利免费观看 | 国内精品久久久久影院男同志 | 厨房play黄瓜进去小说h | 男人天堂网页 | 美女脱一净二净不带胸罩 | 日本欧美强乱视频在线 | 亚洲国产视频一区 | 国产短视频精品一区二区三区 | 国语视频高清在线观看 | 91制片厂制作果冻传媒八夷 | 日韩亚洲欧美综合一区二区三区 | 国产乱码在线精品可播放 | 洗濯屋动漫在线观看 | 嫩草成人影院 | 亚洲免费色图 | 亚洲咪咪 | 奇米影视中文字幕 |