亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

解決spring懶加載以及@PostConstruct結(jié)合的坑

 更新時(shí)間:2021年12月21日 15:20:34   作者:RockeyCui  
這篇文章主要介紹了解決spring懶加載以及@PostConstruct結(jié)合的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

spring懶加載及@PostConstruct的坑

舉例說(shuō)明:

下面是一個(gè)初始化數(shù)據(jù)的組件

@Component
public class InitData {
    /**
     * 初始化加載bean
     */
    @PostConstruct
    public void init() {
        Map<String, String> map = new HashMap<String, String>();
        for (int i=0;i<10;i++) {
            map.put(i+"", i+"");
        }
        //模擬加載一些別單例模式bean的數(shù)據(jù)初始化
        ErrorMsgUtil1.getInstance().setMap(map);
        ErrorMsgUtil2.getInstance().setMap(map);
    }

好了,如果你開(kāi)啟了spring的懶加載模式,而且 InitData這個(gè)bean只是被掃描而沒(méi)有被注入,那么ErrorMsgUtil里的map永遠(yuǎn)是空的。

@PostConstruct實(shí)在bean初始化的時(shí)候被創(chuàng)建的,開(kāi)啟了懶加載顯然如果InitData沒(méi)有被用到那么就一直不執(zhí)行了。

此坑已踩,小弟還是對(duì)spring理解不深,繼續(xù)學(xué)習(xí)。

ps:如何開(kāi)啟spring的懶加載模式,在spring.xml中加上下面的代碼中最后一句即可

<?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"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="  
    http://www.springframework.org/schema/beans   
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context-3.0.xsd  
    " default-lazy-init="true">

遺留問(wèn)題 @PostConstruct注入不成功

前兩天做了個(gè)純java代碼的rabbitMQ監(jiān)聽(tīng)多個(gè)ip的客戶(hù)端功能,由于用的不是配置方式的listener方式—博文中有這一節(jié),無(wú)法自動(dòng)啟動(dòng)。就用@PostConstruct來(lái)項(xiàng)目啟動(dòng)時(shí)運(yùn)行監(jiān)聽(tīng)mq,但是老遇到調(diào)用業(yè)務(wù)邏輯層方法時(shí),注入不成功導(dǎo)致空指針異常。今天排查了一下,發(fā)現(xiàn)主要問(wèn)題是框架掃包忽略了。

直接先說(shuō)原因吧

1.忽略ssm本身對(duì)注解是通過(guò)掃包才讓注解有效的

<!-- 自動(dòng)掃描該包,支持注解的層限制,把a(bǔ)pi這個(gè)controller層排除在外了。另外多個(gè)包中間用逗號(hào)或者分號(hào)隔開(kāi)都可以。 -->
<context:component-scan base-package="com.**.service,com.**.action,com.**.common" >
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.api"/>
</context:component-scan>

2.忽略@Service的注解

由于掃包是掃service層和action層(相當(dāng)于service層),common工具層。所以在api層(相當(dāng)于controller層)用@Service和不用注解都是錯(cuò)誤的,都會(huì)導(dǎo)致注入失敗。

3.注意掃包區(qū)間

出了這個(gè)范圍@PostConstruct是無(wú)效的。應(yīng)用在啟動(dòng)時(shí)是不會(huì)走帶有這個(gè)注解的方法的。

4.@PostCoustruct注解用于

在依賴(lài)關(guān)系注入完成之后需要執(zhí)行的方法上,以執(zhí)行任何初始化。此方法所在的類(lèi)必須放入服務(wù)之前調(diào)用。也就是該注解的類(lèi)上不能隨便注解:經(jīng)驗(yàn)總結(jié)是能用@Service注解,不能用@Controller注解,否則啟動(dòng)不會(huì)走這個(gè)方法。這個(gè)類(lèi)定位為服務(wù)層/業(yè)務(wù)層。而不是控制層(web層)

這里寫(xiě)圖片描述

有了上面說(shuō)的注意點(diǎn)。我重新在工具類(lèi)包c(diǎn)ommon包中寫(xiě)了個(gè)測(cè)試類(lèi)。然后spring配置文件上掃包范圍增加了這個(gè)common包。代碼如下:com.zhanglf.common.cache.CommonCacheMap.java

package com.zhanglf.common.cache;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.zlf.bo.StaffBo;
import com.zlf.service.IStaffService;
@Service("CommonCacheMap")
public class CommonCacheMap {
    @Resource
    private IStaffService staffService;
    @PostConstruct
    public void getOneStaff(){
        StaffBo staffBo = staffService.selectByPrimaryKey("s01");
        System.out.println(staffBo.getName());
    }
}

結(jié)果是注入成功,運(yùn)行結(jié)果如下:

這里寫(xiě)圖片描述

這樣@PostConstruct注入問(wèn)題就解決了。

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

相關(guān)文章

  • 詳解Java中兩種分頁(yè)遍歷的使用姿勢(shì)

    詳解Java中兩種分頁(yè)遍歷的使用姿勢(shì)

    這篇文章主要介紹了詳解Java中兩種分頁(yè)遍歷的使用姿勢(shì),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 帶你粗略了解Java數(shù)組的使用

    帶你粗略了解Java數(shù)組的使用

    這篇文章主要給大家介紹了關(guān)于Java中數(shù)組的定義和使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • SpringBoot項(xiàng)目jar和war打包部署方式詳解

    SpringBoot項(xiàng)目jar和war打包部署方式詳解

    這篇文章主要為大家介紹了SpringBoot項(xiàng)目jar和war打包部署方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 解決IDEA導(dǎo)入javaWeb項(xiàng)目注解爆紅的問(wèn)題

    解決IDEA導(dǎo)入javaWeb項(xiàng)目注解爆紅的問(wèn)題

    這篇文章主要介紹了解決IDEA導(dǎo)入javaWeb項(xiàng)目注解爆紅的問(wèn)題,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • java報(bào)錯(cuò):找不到或無(wú)法加載主類(lèi)的解決方法簡(jiǎn)單粗暴

    java報(bào)錯(cuò):找不到或無(wú)法加載主類(lèi)的解決方法簡(jiǎn)單粗暴

    本文主要介紹了java報(bào)錯(cuò):找不到或無(wú)法加載主類(lèi)的解決方法簡(jiǎn)單粗暴,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • java圖片和文本同時(shí)提交到表單的實(shí)例代碼

    java圖片和文本同時(shí)提交到表單的實(shí)例代碼

    在本篇文章里小編給大家整理的是關(guān)于java實(shí)現(xiàn)圖片和文本同時(shí)提交到表單的相關(guān)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2020-02-02
  • Java 其中翻轉(zhuǎn)字符串的實(shí)現(xiàn)方法

    Java 其中翻轉(zhuǎn)字符串的實(shí)現(xiàn)方法

    這篇文章主要介紹了Java 其中翻轉(zhuǎn)字符串的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2014-02-02
  • 淺談java泛型的作用及其基本概念

    淺談java泛型的作用及其基本概念

    下面小編就為大家?guī)?lái)一篇淺談java泛型的作用及其基本概念。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • Java OpenCV圖像處理之圖形與文字繪制

    Java OpenCV圖像處理之圖形與文字繪制

    這篇文章主要為大家介紹了如何利益Java OpenCV實(shí)現(xiàn)在圖像上繪制文字與形狀,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起動(dòng)手試一試
    2022-02-02
  • java String.split 無(wú)法使用小數(shù)點(diǎn)分割的問(wèn)題

    java String.split 無(wú)法使用小數(shù)點(diǎn)分割的問(wèn)題

    這篇文章主要介紹了java String.split 無(wú)法使用小數(shù)點(diǎn)分割的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02

最新評(píng)論