Spring 項目 Java 訪問修飾符 + 非訪問修飾符全景梳理詳解
前言Java 修飾符分為兩大體系訪問權(quán)限修飾符控制類 / 成員可見范圍、非訪問修飾符定義特性、生命周期、Spring 框架專屬語義。 SpringBoot/Spring 開發(fā)中修飾符貫穿 Controller、Service、Mapper、實體類、工具類、配置類全場景不同修飾符搭配注解會產(chǎn)生截然不同的 Bean 生命周期、依賴注入、序列化、繼承效果。 本文以多表格拆分 場景適配 Spring 工程實操規(guī)范完整梳理。一、第一大類訪問權(quán)限修飾符4 個控制可見范圍核心作用限定類、成員變量、成員方法、構(gòu)造器可被調(diào)用的范圍作用域從小到大排序private 默認(rèn)(包私有) protected public表 1四大訪問修飾符作用域?qū)φ毡硇揎椃形拿Q本類內(nèi)部同一個包下其他類子類不同包任意包所有類Spring 項目常規(guī)使用場景private私有? 可見? 不可見? 不可見? 不可見1.Service 注入的 Mapper 成員變量 2. 實體類 PO/DO 所有屬性字段 3. 工具類內(nèi)部私有工具方法 4. 常量私有成員無修飾符 default包私有 / 默認(rèn)? 可見? 可見? 不可見? 不可見Spring 極少主動使用僅同一包內(nèi)協(xié)作工具類臨時方法protected受保護? 可見? 可見? 可見? 不可見1. 父類公共基礎(chǔ) PO 審計字段createTime/updateTime 2. 抽象父 Service 通用業(yè)務(wù)模板方法public公共? 可見? 可見? 可見? 可見1.Controller 所有接口方法 2.Service 接口定義、實現(xiàn)類對外業(yè)務(wù)方法 3.Mapper 接口 4. 對外暴露的工具類靜態(tài)方法表 2訪問修飾符使用硬性規(guī)范Spring 工程最佳實踐代碼元素推薦修飾符禁止使用原因說明實體類 PO/DTO/Form 屬性字段privatepublic封裝特性通過 get/set 訪問Jackson 序列化默認(rèn)適配私有字段Service 層注入 Mapper 對象privatepublic/protected依賴注入無需對外暴露保證封裝Controller 接口請求方法public其他SpringMVC 需要外部反射調(diào)用接口方法必須 public業(yè)務(wù)接口XXXServicepublicdefault跨包調(diào)用實現(xiàn)類必須公共工具類內(nèi)部工具方法privatepublic僅類內(nèi)調(diào)用無需對外開放抽象父類模板方法protectedprivate供子類重寫拓展外部不可調(diào)用二、第二大類基礎(chǔ)非訪問修飾符Java 原生核心修飾符Spring 高頻搭配注解使用模塊 1static 靜態(tài)修飾符表 3static 修飾不同元素效果 Spring 場景修飾對象核心特性Spring 開發(fā)適用場景禁忌場景static 變量靜態(tài)變量屬于類本身不屬于實例全局唯一一份內(nèi)存所有對象共享1. 全局常量public static final 2. 工具類全局配置參數(shù)不能修飾 Autowired 注入成員靜態(tài)變量無法被 Spring 自動注入static 方法靜態(tài)方法無需 new 實例類名。方法名 () 直接調(diào)用內(nèi)部只能訪問靜態(tài)資源通用工具類日期轉(zhuǎn)換、Bean 拷貝、加解密工具方法不能調(diào)用非靜態(tài)成員不能加 Transactional 事務(wù)注解事務(wù)依賴實例代理static 代碼塊類加載時執(zhí)行一次僅初始化靜態(tài)資源工具類加載初始化配置、加載證書文件業(yè)務(wù)層幾乎不用static 內(nèi)部類脫離外部類可獨立實例化復(fù)雜 DTO 嵌套內(nèi)部枚舉 / 子對象極少使用模塊 2final 最終修飾符不可修改表 4final 修飾不同元素規(guī)則對照表修飾對象語義約束Spring 項目使用場景final 變量賦值一次后永久不可修改1. 全局常量public static final String REDIS_PREFIX user:;2. 方法入?yún)⒔狗椒▋?nèi)篡改入?yún)ο笠胒inal 方法子類無法重寫該方法父類固定模板方法不允許子類篡改核心邏輯final 類類不能被繼承無子類1. 通用工具類BeanUtil、DateUtil 2. 枚舉類默認(rèn)都是 final模塊 3abstract 抽象修飾符面向接口編程核心Spring 架構(gòu)基石表 5abstract 使用規(guī)則 業(yè)務(wù)場景修飾對象約束規(guī)則Spring 架構(gòu)場景abstract 抽象類不能 new 實例可包含抽象方法 普通成員變量 / 普通方法通用父 BaseService、BaseController封裝分頁、異常統(tǒng)一處理abstract 抽象方法無方法體必須被子類實現(xiàn)重寫模板方法模式定義業(yè)務(wù)標(biāo)準(zhǔn)流程子類差異化實現(xiàn)關(guān)鍵接口 interface 默認(rèn)所有方法都是 public abstract模塊 4synchronized /volatile/transient 并發(fā)序列化修飾符表 6并發(fā) 序列化修飾符場景明細修飾符核心作用Spring 使用場景synchronized同步鎖保證多線程原子性、可見性定時任務(wù)多線程并發(fā)爭搶資源、庫存扣減簡易加鎖分布式推薦 Redissonvolatile保證變量內(nèi)存可見性禁止指令重排多線程全局開關(guān)標(biāo)記定時任務(wù)啟停標(biāo)記transient序列化忽略字段PO 實體中不需要存入 Redis / 序列化的臨時字段三、第三大類Spring 生態(tài)專屬語義修飾結(jié)合注解生效Java 原生修飾符 Spring 注解聯(lián)動Spring 不會新增語法修飾符但通過原生修飾符 框架注解賦予特殊生命周期、依賴注入、代理特性是業(yè)務(wù)開發(fā)最常用組合。表 7Autowired 注入場景修飾符搭配規(guī)范成員變量修飾符搭配 Autowired 效果推薦度privateSpring 反射無視私有權(quán)限可正常注入封裝性最好????? 標(biāo)準(zhǔn)寫法protected子類可直接訪問注入對象適合父子 Service 繼承場景????public外部可隨意修改注入 Bean破壞容器單例不推薦?final搭配構(gòu)造注入推薦寫法private final UserMapper userMapper;構(gòu)造器注入不可變 Bean????? Spring 官方推薦表 8Bean 作用域 修飾符聯(lián)動單例 / 多例修飾符組合Bean 生命周期特性使用場景private static Autowired禁止使用靜態(tài)變量只會注入一次單例容器下會出現(xiàn)注入失效? 嚴(yán)禁private final 構(gòu)造注入Bean 創(chuàng)建完成后無法被修改線程安全無循環(huán)依賴隱患? 生產(chǎn)首選四、第四大類方法專屬修飾符匯總接口 / 實現(xiàn)類方法全覆蓋表 9方法所有修飾符組合含義對照表修飾符組合適用位置核心作用public voidController 接口方法接收前端 http 請求SpringMVC 反射調(diào)用public OverrideService 實現(xiàn)類重寫接口方法實現(xiàn)業(yè)務(wù)規(guī)范編譯器校驗方法簽名protected abstract抽象父類模板方法預(yù)留拓展點子類必須實現(xiàn)private static工具類內(nèi)部靜態(tài)工具方法全局調(diào)用無狀態(tài)線程安全public static final常量工具方法邏輯永久固定不可重寫private synchronized類內(nèi)多線程同步方法本地鎖保證線程安全五、綜合總表Spring 分層代碼全層級修飾符標(biāo)準(zhǔn)配置表 10項目各層代碼統(tǒng)一修飾符規(guī)范企業(yè)級開發(fā)標(biāo)準(zhǔn)代碼分層代碼元素標(biāo)準(zhǔn)修飾符補充說明控制層 Controller類public交給 SpringMVC 掃描注冊 Bean請求接口方法public必須公共才能被外部訪問業(yè)務(wù)層 Service業(yè)務(wù)接口public跨包調(diào)用接口實現(xiàn)類ServicepublicIOC 容器托管注入 Mapper 成員變量private final構(gòu)造器注入官方最優(yōu)方案業(yè)務(wù)實現(xiàn)方法public供上層調(diào)用數(shù)據(jù)訪問層 MapperMapper 接口publicMyBatis 掃描生成代理對象實體層 PO/DTO/Form實體類public序列化反射需要所有屬性字段private封裝get/set 訪問get/set 方法publicJackson 序列化依賴公共 getter通用工具類工具類public final禁止繼承工具方法public static類名直接調(diào)用全局常量public static final統(tǒng)一配置常量配置類 Configuration配置類publicSpring 掃描配置 BeanBean 生成對象方法public容器注冊第三方組件六、高頻易錯坑點總結(jié)? 靜態(tài)變量不能使用 Autowiredstatic 屬于類加載階段早于 Spring 容器初始化注入一定會失效? private 方法不能加 TransactionalSpring 事務(wù)基于 JDK/CGLIB 動態(tài)代理私有方法無法被代理攔截事務(wù)不生效? final 成員變量推薦構(gòu)造器注入杜絕字段注入循環(huán)依賴問題線程安全性更高? 實體屬性一律 private遵循 Java 封裝原則適配 JSON 序列化、MyBatis 字段映射? 接口內(nèi)變量默認(rèn) public static final方法默認(rèn) public abstract無需手動書寫。

相關(guān)新聞

超低損耗 PTFE 復(fù)合介質(zhì)芯層,廣氟 GFN 系列構(gòu)筑高頻 PCB 基材國產(chǎn)化核心壁壘

超低損耗 PTFE 復(fù)合介質(zhì)芯層,廣氟 GFN 系列構(gòu)筑高頻 PCB 基材國產(chǎn)化核心壁壘

毫米波通信、半導(dǎo)體測試載板、高頻覆銅板、航空航天雷達等高端電子領(lǐng)域的快速迭代,對 PCB 基板的高頻電學(xué)穩(wěn)定性、高低溫尺寸穩(wěn)定性、介質(zhì)損耗控制提出了嚴(yán)苛標(biāo)準(zhǔn)。傳統(tǒng) FR-4 環(huán)氧樹脂板材受制于基材分子結(jié)構(gòu)與玻纖編織帶來的玻纖效應(yīng),在 10GHz 及以上高…

2026/7/29 0:55:26 閱讀更多
優(yōu)惠券省錢APP數(shù)據(jù)庫優(yōu)化:海量訂單分庫分表策略與索引調(diào)優(yōu)指南

優(yōu)惠券省錢APP數(shù)據(jù)庫優(yōu)化:海量訂單分庫分表策略與索引調(diào)優(yōu)指南

優(yōu)惠券省錢APP數(shù)據(jù)庫優(yōu)化:海量訂單分庫分表策略與索引調(diào)優(yōu)指南 大家好,我是省賺客APP研發(fā)者微賺淘客! 在電商返利領(lǐng)域,訂單數(shù)據(jù)的增長速度是驚人的。隨著用戶量的激增,單表數(shù)據(jù)量突破千萬甚至億級是常態(tài)。面對海量訂單…

2026/7/29 0:45:26 閱讀更多
跨境支付系統(tǒng)架構(gòu)演進:從SWIFT到本地化清算通道

跨境支付系統(tǒng)架構(gòu)演進:從SWIFT到本地化清算通道

背景:跨境支付為什么這么慢?做過跨境支付系統(tǒng)開發(fā)的工程師應(yīng)該都有體會——一筆從國內(nèi)到海外的資金,動輒3到5個工作日才能到賬。問題不出在銀行系統(tǒng)慢,出在底層架構(gòu)上。傳統(tǒng)跨境支付走的是SWIFT網(wǎng)絡(luò)。資金從匯款行出發(fā)&#xff0c…

2026/7/29 5:36:05 閱讀更多
Pandas數(shù)據(jù)處理實戰(zhàn):從Series與DataFrame基礎(chǔ)到完整工作流

Pandas數(shù)據(jù)處理實戰(zhàn):從Series與DataFrame基礎(chǔ)到完整工作流

1. 項目概述:從闖關(guān)實驗看數(shù)據(jù)處理核心技能最近在“頭歌”平臺上帶學(xué)生過Python數(shù)據(jù)處理實驗,發(fā)現(xiàn)很多新手卡在了數(shù)據(jù)框和序列的基本操作上。這其實是個挺普遍的現(xiàn)象:大家學(xué)Python數(shù)據(jù)分析,一上來就被pandas庫的DataFrame和Series…

2026/7/29 5:36:05 閱讀更多
智能Bot產(chǎn)品核心價值定位與實戰(zhàn)框架

智能Bot產(chǎn)品核心價值定位與實戰(zhàn)框架

1. Clawdbot的啟示:智能Bot產(chǎn)品的核心價值定位第一次接觸Clawdbot時,最讓我驚訝的是它解決實際業(yè)務(wù)痛點的精準(zhǔn)度。這個智能Bot沒有堆砌花哨的AI功能,而是聚焦于企業(yè)決策層的核心需求——通過自動化數(shù)據(jù)抓取和智能分析,將分散在各系…

2026/7/29 5:26:04 閱讀更多
面試官大笑:“一個任務(wù)拆給 5 個 Subagent 并行跑,不比 1 個快 5 倍?“我搖頭:“快不了,還可能更慢“

面試官大笑:“一個任務(wù)拆給 5 個 Subagent 并行跑,不比 1 個快 5 倍?“我搖頭:“快不了,還可能更慢“

前兩個月,我在重構(gòu) AlgoMooc 網(wǎng)站過程中,發(fā)現(xiàn)一個問題:在 Claude Code 里把一個任務(wù)拆給 5 個 Subagent 并行跑,結(jié)果可能比 1 個 agent 從頭干到尾還慢? 大多數(shù)人的第一反應(yīng)是反過來的:活是并行干的&#…

2026/7/29 0:15:24 閱讀更多
# 鴻蒙 HarmonyOS 應(yīng)用開發(fā)實戰(zhàn)(第25期)|骰子(Dice Roller)— Unicode 符號與動畫渲染精講

# 鴻蒙 HarmonyOS 應(yīng)用開發(fā)實戰(zhàn)(第25期)|骰子(Dice Roller)— Unicode 符號與動畫渲染精講

一、應(yīng)用概述 骰子(Dice Roller) 是一款經(jīng)典的休閑娛樂應(yīng)用,模擬了真實擲骰子的過程。應(yīng)用投擲兩個骰子(六面標(biāo)準(zhǔn)骰),使用 Unicode 骰面符號直觀展示每個骰子的點數(shù),并伴有快速滾動的動畫效果。…

2026/7/29 0:15:24 閱讀更多