最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot中單例類實(shí)現(xiàn)對象的注入方式

 更新時(shí)間:2021年08月02日 11:37:28   作者:「已注銷」  
這篇文章主要介紹了Spring Boot中單例類實(shí)現(xiàn)對象的注入方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Spring Boot 單例類實(shí)現(xiàn)對象的注入

1、最近接手了一個(gè)項(xiàng)目

項(xiàng)目用的是SpringBoot,但其中有個(gè)類用的是單例,為了不改變單例,且還需要引入Spring管理的Bean對象

2、對于一個(gè)單例類按照平時(shí)的注解方式添加

啟動(dòng)時(shí)會報(bào)空指針異常,因?yàn)閟tatic類對象是創(chuàng)建對象后,內(nèi)存中還沒有注入Bean信息,且無法初始化Bean實(shí)例,這里的解決辦法是利用@PostConstruct來對單例類中對象的注入

@Component
public class MesssageHandle implements IMessageHandler {
   private final static Logger logger = LoggerFactory.getLogger(MesssageHandle.class);
   private static MesssageHandle instance = new MesssageHandle();
   @Autowired
   private ScheduleService scheduleService;
   private MesssageHandle(){ }
   public static MesssageHandle getInstance() {
      return instance;
   }
 
   @PostConstruct
   public void init(){
      instance = this;
      instance.scheduleService = this.scheduleService;
   }

spring boot的對象注入

1、需求

現(xiàn)在我們的項(xiàng)目中需要引入一個(gè)java類庫,我想要很方便的使用該類庫中的一個(gè)類,并且我想要?jiǎng)?chuàng)建這個(gè)類的一個(gè)單例對象。然后可以很方便的在各個(gè)模塊中用@AutoWired進(jìn)行對象注入。

比如一個(gè)配置文件,我在一個(gè)地方創(chuàng)建Configuration對象,讀取配置文件中的配置,然后在各個(gè)模塊中使用該對象。

2、需求分析

這個(gè)需求涉及到兩個(gè)問題

一個(gè)是單例對象的創(chuàng)建;另外一個(gè)是單例對象的引用。因?yàn)?,你要用一個(gè)對象,你首先得創(chuàng)建它。創(chuàng)建一個(gè)對象在Spring中有固定的模式,在定義類的時(shí)候使用@Component注解,@Component默認(rèn)是單例的。這樣spring framework在進(jìn)行component scan的時(shí)候就會創(chuàng)建這個(gè)對象。用的時(shí)候很簡單,只需要@Autowired就可以了。

@Autowired最好使用構(gòu)造器注入,也就是說,不是直接將@Autowired放在成員變量上面,而是放在構(gòu)建函數(shù)上面,然后通過構(gòu)造函數(shù)的參數(shù)注入。為何要這么麻煩?

3、Spring boot是對spring使用的簡化

所以這整個(gè)的過程也是Spring boot所具備的能力。

4、以上分析的是自己創(chuàng)建的類對象注入

現(xiàn)在如果用這種對象注入來使用成熟的包中的對象呢?

4.1 使用配置文件生成bean

<bean class="xxx"></bean>

4.2 使用@Configuration注解生成bean

@Configuration
public class AppConfig {
    @Bean(name = "timedCache")
    public TimedCache<String, Muser> listStrBean() {
        return new TimedCache<String, Muser>(30 * 6000);
    } 
}

5 各個(gè)常用的注解

5.1 dao

@Repository

5.2 model

不需要注解

5.3 restful的controller

@RestController

5.4 service

service接口處不用,在接口的實(shí)現(xiàn)類處用@Service

6 關(guān)于@Autowired

要用到另外一個(gè)類的對象時(shí),首先定義一個(gè)引用。

然后在本類的構(gòu)造函數(shù)中給該引用賦值,然后將@Autowired來注解這個(gè)構(gòu)造函數(shù)。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

壤塘县| 广丰县| 长子县| 登封市| 巫溪县| 武陟县| 万全县| 长汀县| 文化| 永福县| 乌海市| 清丰县| 和硕县| 商都县| 涡阳县| 赣州市| 龙陵县| 疏勒县| 申扎县| 竹北市| 大同市| 凌源市| 额尔古纳市| 蕲春县| 江西省| 东明县| 突泉县| 丹寨县| 浦北县| 滦南县| 旺苍县| 依兰县| 聂荣县| 辉县市| 金秀| 安岳县| 衢州市| 临江市| 南江县| 伊宁市| 克什克腾旗|