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

Java常用注解擴(kuò)展對(duì)比舉例詳解

 更新時(shí)間:2025年03月25日 09:49:44   作者:猿享天開(kāi)  
這篇文章主要介紹了Java常用注解擴(kuò)展對(duì)比的相關(guān)資料,提供了豐富的代碼示例,并總結(jié)了最佳實(shí)踐建議,幫助開(kāi)發(fā)者更好地理解和應(yīng)用這些注解,需要的朋友可以參考下

一、@Controller 與 @RestController 對(duì)比

對(duì)比維度@Controller@RestController
定義Spring MVC 的基礎(chǔ)控制器注解@Controller + @ResponseBody 的組合注解
返回值處理返回視圖名稱(需配合視圖解析器)直接返回JSON/XML數(shù)據(jù)(自動(dòng)添加 @ResponseBody
適用場(chǎng)景傳統(tǒng)MVC架構(gòu)(如JSP/Thymeleaf頁(yè)面渲染)RESTful API開(kāi)發(fā)(前后端分離場(chǎng)景)
HTTP響應(yīng)頭Content-Type: text/html(默認(rèn))Content-Type: application/json(默認(rèn))
代碼示例```java```java
@Controller@RestController
public class WebCtrl {public class ApiCtrl {
@GetMapping(“/page”)@GetMapping(“/data”)
public String page() {public User data() {
return “index”; // 返回視圖名return userService.findUser(); // 自動(dòng)轉(zhuǎn)JSON
}}
}}

二、使用 @Data 與 不使用 @Data 對(duì)比

對(duì)比維度使用 @Data不使用 @Data
代碼量自動(dòng)生成以下方法:
- 所有字段的getter/setter
toString()equals()/hashCode()
需手動(dòng)編寫(xiě)所有方法
維護(hù)性字段增減時(shí)無(wú)需修改方法字段變更需同步修改相關(guān)方法
繼承關(guān)系處理需顯式添加 @EqualsAndHashCode(callSuper=true) 包含父類字段手動(dòng)編寫(xiě)時(shí)可直接控制是否包含父類字段
框架兼容性依賴Lombok插件(需IDE支持)無(wú)額外依賴
代碼示例```java```java
@Datapublic class User {
public class User {private Long id;
private Long id;private String name;
private String name;
// 自動(dòng)生成所有方法// 手動(dòng)編寫(xiě)getter/setter
}public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
// …其他方法
}

注意事項(xiàng)

  • 使用 @Data 時(shí),若類有繼承關(guān)系,需添加 @EqualsAndHashCode(callSuper=true)
  • 某些場(chǎng)景(如JPA實(shí)體類)需顯式定義無(wú)參構(gòu)造器(通過(guò) @NoArgsConstructor

三、使用 @TableName 與 不使用 @TableName 對(duì)比

對(duì)比維度使用 @TableName不使用 @TableName
表名映射規(guī)則顯式指定數(shù)據(jù)庫(kù)表名(如 @TableName("sys_user")按MyBatis-Plus默認(rèn)規(guī)則映射:
類名駝峰轉(zhuǎn)下劃線(如 SysUser → sys_user
適用場(chǎng)景1. 表名含特殊字符(如 user-info
2. 類名與表名無(wú)對(duì)應(yīng)關(guān)系
類名與表名嚴(yán)格遵循駝峰轉(zhuǎn)下劃線規(guī)則
全局配置覆蓋優(yōu)先級(jí)高于全局配置可通過(guò)配置文件統(tǒng)一設(shè)置表名前綴:
mybatis-plus.global-config.db-config.table-prefix=sys_
代碼示例```java```java
@Data@Data
@TableName(“sys_user”) // 顯式指定表名public class SysUser { // 默認(rèn)映射為 sys_user
public class User {private Long id;
private Long id;}
}

注意事項(xiàng)

  • 表名包含SQL關(guān)鍵字時(shí)需轉(zhuǎn)義:@TableName("order")
  • 分表場(chǎng)景可通過(guò)動(dòng)態(tài)表名處理器(TableNameHandler)實(shí)現(xiàn)

四、依賴注入注解對(duì)比

注解對(duì)核心區(qū)別使用場(chǎng)景
@Autowired vs @Resource@Autowired(Spring)按類型注入
@Resource(JSR-250)按名稱注入
明確指定Bean名稱時(shí)用@Resource,優(yōu)先使用構(gòu)造器注入時(shí)用@Autowired
@Primary vs @Qualifier@Primary標(biāo)記首選Bean
@Qualifier指定具體Bean名稱
存在多個(gè)相同類型Bean時(shí),優(yōu)先使用@Primary,需精確控制時(shí)用@Qualifier

代碼示例

// @Autowired + @Qualifier
@Autowired 
@Qualifier("mysqlDataSource")
private DataSource dataSource;

// @Resource
@Resource(name = "oracleDataSource")
private DataSource dataSource;

五、Spring MVC 參數(shù)綁定注解對(duì)比

注解對(duì)核心區(qū)別使用場(chǎng)景
@RequestParam vs @PathVariable@RequestParam獲取URL參數(shù)
@PathVariable獲取URI模板變量
RESTful風(fēng)格URL用@PathVariable,傳統(tǒng)表單參數(shù)用@RequestParam
@ModelAttribute vs @RequestBody@ModelAttribute綁定Form表單數(shù)據(jù)
@RequestBody綁定JSON請(qǐng)求體
表單提交用@ModelAttribute,API接口傳輸復(fù)雜對(duì)象用@RequestBody

代碼示例

// PathVariable
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) { ... }

// RequestBody
@PostMapping("/users")
public ResponseEntity<?> createUser(@RequestBody UserDTO userDTO) { ... }

六、JPA/Hibernate 映射注解對(duì)比

注解對(duì)核心區(qū)別使用場(chǎng)景
@Entity vs @Table@Entity聲明JPA實(shí)體類
@Table指定數(shù)據(jù)庫(kù)表名
類名與表名不一致時(shí)使用@Table
@Column vs @Transient@Column映射數(shù)據(jù)庫(kù)列
@Transient標(biāo)記非持久化字段
字段需要特殊列名或類型時(shí)用@Column,臨時(shí)計(jì)算字段用@Transient
@OneToMany vs @ManyToOne- 定義一對(duì)多/多對(duì)一關(guān)系根據(jù)業(yè)務(wù)關(guān)系方向選擇(部門(mén)-員工:部門(mén)用@OneToMany,員工用@ManyToOne

代碼示例

@Entity
@Table(name = "departments")
public class Department {
    @OneToMany(mappedBy = "department")
    private List<Employee> employees;
}

@Entity
public class Employee {
    @ManyToOne
    @JoinColumn(name = "dept_id")
    private Department department;
}

七、Spring Boot 配置注解對(duì)比

注解對(duì)核心區(qū)別使用場(chǎng)景
@Value vs @ConfigurationProperties@Value注入單個(gè)屬性
@ConfigurationProperties批量綁定屬性
簡(jiǎn)單配置用@Value,復(fù)雜配置對(duì)象用@ConfigurationProperties
@Profile vs @Conditional@Profile按環(huán)境激活配置
@Conditional按條件創(chuàng)建Bean
多環(huán)境配置用@Profile,動(dòng)態(tài)裝配邏輯用@Conditional

配置示例

# application.yml
app:
  security:
    enabled: true
    timeout: 300

代碼實(shí)現(xiàn)

@Configuration
@ConfigurationProperties(prefix = "app.security")
public class SecurityConfig {
    private boolean enabled;
    private int timeout;
    // getters/setters
}

八、Lombok 注解對(duì)比

注解對(duì)核心區(qū)別使用場(chǎng)景
@Data vs @Value@Data生成可變對(duì)象
@Value生成不可變對(duì)象(final字段)
需要修改字段值時(shí)用@Data,只讀數(shù)據(jù)傳輸對(duì)象用@Value
@Builder vs @AllArgsConstructor@Builder支持鏈?zhǔn)綐?gòu)建
@AllArgsConstructor生成全參構(gòu)造器
復(fù)雜對(duì)象構(gòu)建用@Builder,依賴注入全參構(gòu)造用@AllArgsConstructor

代碼示例

@Value
@Builder
public class ImmutablePoint {
    private final int x;
    private final int y;
}

// 使用
ImmutablePoint point = ImmutablePoint.builder().x(10).y(20).build();

九、事務(wù)管理注解對(duì)比

注解對(duì)核心區(qū)別使用場(chǎng)景
@Transactional vs @Modifying@Transactional聲明事務(wù)邊界
@Modifying標(biāo)記DML操作
服務(wù)層方法用@Transactional,JPA更新查詢用@Modifying

代碼示例

@Service
public class UserService {
    @Transactional
    public void updateUser(User user) {
        userRepository.save(user);
    }
}

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    @Modifying
    @Query("UPDATE User u SET u.name = ?1 WHERE u.id = ?2")
    int updateNameById(String name, Long id);
}

十、測(cè)試相關(guān)注解對(duì)比

注解對(duì)核心區(qū)別使用場(chǎng)景
@Mock vs @MockBean@Mock(Mockito)創(chuàng)建模擬對(duì)象
@MockBean(Spring Boot Test)替換Spring容器中的Bean
單元測(cè)試用@Mock,集成測(cè)試用@MockBean
@SpringBootTest vs @WebMvcTest@SpringBootTest加載完整上下文
@WebMvcTest僅加載Web層組件
全集成測(cè)試用@SpringBootTest,控制層隔離測(cè)試用@WebMvcTest

測(cè)試示例

// 全集成測(cè)試
@SpringBootTest
class UserServiceIntegrationTest {
    @Autowired
    private UserService userService;
}

// 控制層測(cè)試
@WebMvcTest(UserController.class)
class UserControllerTest {
    @MockBean
    private UserService userService;
    @Autowired
    private MockMvc mockMvc;
}

綜合對(duì)比總結(jié)表

功能場(chǎng)景推薦注解組合典型應(yīng)用
REST API開(kāi)發(fā)@RestController + @RequestBody + @Valid前后端分離接口開(kāi)發(fā)
JPA實(shí)體映射@Entity + @Table + @Column + @OneToMany數(shù)據(jù)庫(kù)表結(jié)構(gòu)映射
配置管理@ConfigurationProperties + @Profile多環(huán)境配置切換
測(cè)試覆蓋@SpringBootTest + @MockBean + @DataJpaTest(按需選擇)分層測(cè)試策略
依賴注入構(gòu)造器注入優(yōu)先,@Autowired + @Qualifier避免循環(huán)依賴

最佳實(shí)踐建議

  • 分層使用嚴(yán)格遵循Controller→Service→Repository分層架構(gòu),避免跨層注解混用。

  • 注解最小化

    • 優(yōu)先使用框架提供的組合注解(如@RestController代替@Controller+@ResponseBody
    • 避免重復(fù)注解(如同時(shí)使用@Component@Service
  • Lombok規(guī)范

    • 實(shí)體類統(tǒng)一使用@Data + @Builder
    • 禁用無(wú)約束的@AllArgsConstructor
  • 事務(wù)控制

    • Service層統(tǒng)一聲明@Transactional(readOnly = true)
    • 寫(xiě)操作顯式指定@Transactional(rollbackFor = Exception.class)
  • 測(cè)試隔離

    • 單元測(cè)試使用Mockito + JUnit5
    • 集成測(cè)試按需選擇@WebMvcTest@DataJpaTest

通過(guò)系統(tǒng)化的注解對(duì)比與組合使用,可顯著提高代碼規(guī)范性和團(tuán)隊(duì)協(xié)作效率。建議結(jié)合SonarLint等代碼質(zhì)量管理工具,確保注解使用的合理性與一致性。

總結(jié)

到此這篇關(guān)于Java常用注解擴(kuò)展對(duì)比的文章就介紹到這了,更多相關(guān)Java常用注解擴(kuò)展內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot將mybatis升級(jí)為mybatis-plus的實(shí)現(xiàn)

    springboot將mybatis升級(jí)為mybatis-plus的實(shí)現(xiàn)

    之前項(xiàng)目工程用的是mybatis,現(xiàn)在需要將其替換為mybatis-plus,本文主要介紹了springboot將mybatis升級(jí)為mybatis-plus的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Java和MySQL數(shù)據(jù)庫(kù)中關(guān)于小數(shù)的保存問(wèn)題詳析

    Java和MySQL數(shù)據(jù)庫(kù)中關(guān)于小數(shù)的保存問(wèn)題詳析

    在Java和MySQL中小數(shù)的精度可能會(huì)受到限制,如float類型的小數(shù)只能精確到6-7位,double類型也只能精確到15-16位,這篇文章主要給大家介紹了關(guān)于Java和MySQL數(shù)據(jù)庫(kù)中關(guān)于小數(shù)的保存問(wèn)題,需要的朋友可以參考下
    2024-01-01
  • 將Java程序包打包為.exe文件的操作步驟

    將Java程序包打包為.exe文件的操作步驟

    將Java程序打包為為.exe文件分為倆個(gè)步驟:將Java程序打包成Jar包和打包為.exe文件,文中通過(guò)圖文結(jié)合的方式給大家講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-06-06
  • SpringCloud的Hystrix簡(jiǎn)單介紹

    SpringCloud的Hystrix簡(jiǎn)單介紹

    這篇文章主要介紹了SpringCloud的Hystrix簡(jiǎn)單介紹,SpringCloud Hystrix是Netflix開(kāi)源的一款容錯(cuò)框架,具備服務(wù)降級(jí),服務(wù)熔斷,依賴隔離,監(jiān)控(Hystrix Dashboard)等功能,同樣具有自我保護(hù)能力,需要的朋友可以參考下
    2023-07-07
  • Spring Cloud Hystrix 服務(wù)容錯(cuò)保護(hù)的原理實(shí)現(xiàn)

    Spring Cloud Hystrix 服務(wù)容錯(cuò)保護(hù)的原理實(shí)現(xiàn)

    這篇文章主要介紹了Spring Cloud Hystrix 服務(wù)容錯(cuò)保護(hù)的原理實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-05-05
  • SpringBoot如何使用redis

    SpringBoot如何使用redis

    文章主要介紹了如何在Spring Boot項(xiàng)目中配置Redis并解決亂碼問(wèn)題,同時(shí)提供了使用Redis操作不同類型數(shù)據(jù)(如String、List、Hash、Set、ZSet和Bitmap)的代碼示例
    2025-03-03
  • SpringBoot整合Freemarker的基本步驟

    SpringBoot整合Freemarker的基本步驟

    這篇文章主要介紹了SpringBoot整合Freemarker的基本步驟,添加依賴及添加相關(guān)配置的實(shí)例代碼詳解,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • Java操作MinIO實(shí)現(xiàn)文件的上傳和刪除

    Java操作MinIO實(shí)現(xiàn)文件的上傳和刪除

    本文主要介紹如何將本地Java項(xiàng)目resources目錄下的一個(gè)PNG圖片上傳到MinIO,然后將上傳的圖片刪除,文中有詳細(xì)的流程步驟和示例代碼,需要的朋友可以參考下
    2023-06-06
  • 教你使用springboot配置多數(shù)據(jù)源

    教你使用springboot配置多數(shù)據(jù)源

    發(fā)現(xiàn)有很多小伙伴還不會(huì)用springboot配置多數(shù)據(jù)源,今天特地給大家整理了本篇文章,文中有非常詳細(xì)的圖文介紹及代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴很有幫助,需要的朋友可以參考下
    2021-05-05
  • Spring IOC簡(jiǎn)單理解及創(chuàng)建對(duì)象的方式

    Spring IOC簡(jiǎn)單理解及創(chuàng)建對(duì)象的方式

    這篇文章主要介紹了Spring IOC簡(jiǎn)單理解及創(chuàng)建對(duì)象的方式,本文通過(guò)兩種方式給大家介紹創(chuàng)建對(duì)象的方法,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09

最新評(píng)論