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