亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么解決spring懶加載和@PostConstruct結合的坑

發布時間:2021-12-21 17:07:07 來源:億速云 閱讀:301 作者:iii 欄目:開發技術

本篇內容主要講解“怎么解決spring懶加載和@PostConstruct結合的坑”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么解決spring懶加載和@PostConstruct結合的坑”吧!

spring懶加載及@PostConstruct的坑

舉例說明:

下面是一個初始化數據的組件

@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的數據初始化
        ErrorMsgUtil1.getInstance().setMap(map);
        ErrorMsgUtil2.getInstance().setMap(map);
    }

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

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

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

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監聽多個ip的客戶端功能,由于用的不是配置方式的listener方式—博文中有這一節,無法自動啟動。就用@PostConstruct來項目啟動時運行監聽mq,但是老遇到調用業務邏輯層方法時,注入不成功導致空指針異常。今天排查了一下,發現主要問題是框架掃包忽略了。

直接先說原因吧

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.注意掃包區間

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

4.@PostCoustruct注解用于

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

怎么解決spring懶加載和@PostConstruct結合的坑

有了上面說的注意點。我重新在工具類包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());
    }
}

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

怎么解決spring懶加載和@PostConstruct結合的坑

到此,相信大家對“怎么解決spring懶加載和@PostConstruct結合的坑”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

石河子市| 宜黄县| 衢州市| 祁阳县| 富宁县| 旺苍县| 会理县| 长武县| 高唐县| 泌阳县| 怀仁县| 宜良县| 临沭县| 西安市| 沅江市| 宁蒗| 万宁市| 赞皇县| 大邑县| 平泉县| 莲花县| 新干县| 垦利县| 西平县| 色达县| 大冶市| 梁山县| 微山县| 梅河口市| 陈巴尔虎旗| 宜阳县| 阜新市| 饶河县| 东乡族自治县| 张家界市| 新田县| 科技| 揭阳市| 霍山县| 嘉义市| 邹平县|