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

解決spring懶加載以及@PostConstruct結合的坑

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

spring懶加載及@PostConstruct的坑

舉例說明:

下面是一個初始化數(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);
    }

好了,如果你開啟了spring的懶加載模式,而且 InitData這個bean只是被掃描而沒有被注入,那么ErrorMsgUtil里的map永遠是空的。

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

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

ps:如何開啟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">

遺留問題 @PostConstruct注入不成功

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

直接先說原因吧

1.忽略ssm本身對注解是通過掃包才讓注解有效的

<!-- 自動掃描該包,支持注解的層限制,把api這個controller層排除在外了。另外多個包中間用逗號或者分號隔開都可以。 -->
<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層(相當于service層),common工具層。所以在api層(相當于controller層)用@Service和不用注解都是錯誤的,都會導致注入失敗。

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

出了這個范圍@PostConstruct是無效的。應用在啟動時是不會走帶有這個注解的方法的。

4.@PostCoustruct注解用于

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

這里寫圖片描述

有了上面說的注意點。我重新在工具類包common包中寫了個測試類。然后spring配置文件上掃包范圍增加了這個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());
    }
}

結果是注入成功,運行結果如下:

這里寫圖片描述

這樣@PostConstruct注入問題就解決了。

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

相關文章

  • Spring?Boot中的過濾器攔截器監(jiān)聽器使用技巧匯總

    Spring?Boot中的過濾器攔截器監(jiān)聽器使用技巧匯總

    本文將介紹在Spring?Boot應用程序中使用過濾器、攔截器和監(jiān)聽器的使用技巧,我們將討論它們之間的區(qū)別,以及何時使用它們,我們還將提供代碼示例,以幫助您在自己的應用程序中使用它們
    2023-12-12
  • Java中的Null到底是什么

    Java中的Null到底是什么

    null是沒有地址,""是有地址但是里面的內(nèi)容是空的,好比做飯 null說明連鍋都沒有 而""則是有鍋沒米,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,下面我們來詳細學習一下它吧
    2019-06-06
  • mybatis-plus樂觀鎖實現(xiàn)方式詳解

    mybatis-plus樂觀鎖實現(xiàn)方式詳解

    這篇文章主要介紹了mybatis-plus樂觀鎖實現(xiàn)方式,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 詳解IDEA社區(qū)版(Community)和付費版(UItimate)的區(qū)別

    詳解IDEA社區(qū)版(Community)和付費版(UItimate)的區(qū)別

    這篇文章主要介紹了詳解IDEA社區(qū)版(Community)和付費版(UItimate)的區(qū)別,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 使用spring-cache一行代碼解決緩存擊穿問題

    使用spring-cache一行代碼解決緩存擊穿問題

    本文主要介紹了使用spring-cache一行代碼解決緩存擊穿問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • 詳解Java實現(xiàn)簡單SPI流程

    詳解Java實現(xiàn)簡單SPI流程

    這篇文章主要介紹了Java實現(xiàn)簡單SPI流程,SPI英文全稱為Service Provider Interface,顧名思義,服務提供者接口,它是jdk提供給“服務提供廠商”或者“插件開發(fā)者”使用的接口
    2023-03-03
  • java設計模式--策略模式詳解

    java設計模式--策略模式詳解

    這篇文章主要介紹了Java經(jīng)典設計模式之策略模式,簡單說明了策略模式的概念、原理并結合實例形式分析了java策略模式的具有用法與相關注意事項,需要的朋友可以參考下
    2021-07-07
  • Java中MessageFormat的使用詳解

    Java中MessageFormat的使用詳解

    本文主要介紹了Java中MessageFormat的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • 通過端口1433連接到主機127.0.0.1的 TCP/IP 連接失敗,錯誤:“connect timed out”的解決方法

    通過端口1433連接到主機127.0.0.1的 TCP/IP 連接失敗,錯誤:“connect timed out”的解

    這篇文章主要介紹了通過端口1433連接到主機127.0.0.1的 TCP/IP 連接失敗,錯誤:“connect timed out”的解決方法,需要的朋友可以參考下
    2015-08-08
  • 詳解spring security 配置多個AuthenticationProvider

    詳解spring security 配置多個AuthenticationProvider

    這篇文章主要介紹了詳解spring security 配置多個AuthenticationProvider ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05

最新評論

岑巩县| 清新县| 博客| 上杭县| 江口县| 当雄县| 武强县| 无极县| 桃园市| 望都县| 彭阳县| 迁西县| 西吉县| 会同县| 靖安县| 德州市| 团风县| 清流县| 怀远县| 永修县| 正镶白旗| 武邑县| 四子王旗| 宕昌县| 汉川市| 建平县| 陇西县| 岱山县| 孝义市| 鄂州市| 贵南县| 马鞍山市| 乌拉特前旗| 乌苏市| 东阳市| 定结县| 沛县| 涪陵区| 崇文区| 宁都县| 清远市|