iT邦幫忙

2021 iThome 鐵人賽

DAY 8
0
Modern Web

誤打誤撞學了Spring Boot 還當了後端工程師系列 第 8

Day 08 - Spring Boot 常用註釋(上)

註釋基本概念

註釋(Annotations) 是Java 5.0 加入的新功能,它強化了程式註解與Javadoc 文件註解的功能,使其更有強制力,並用來歸納各種條件陳述的變化,使開發人員更能掌握語法規則,以下程式進行講解。

// 假設有一個Animal 類別
public class Animal {
	public void move() {
		System.out.println("Move");
	}
}

// 制定一個Dog 類別繼承Animal 並覆寫move() 方法
public class Dog extends Animal {
	public void move() {
		System.out.println("亂跑亂跳");
	}
}

// 以上是正常且合法的作法,但如果將move() 方法寫成以下程式碼
public class Cat extends Animal {
	public void moving() {
		System.out.println("跑一跑跳一跳");
	}
}

Cat 類別應該要覆寫的是move() 方法,卻誤寫成moving() 方法,雖然該程式仍然可以正常編譯與執行,然而覆寫才是我們的目的,但在Java 編譯與執行時,Java 編譯器並不會知道程式設計師是希望覆寫move() 方法。

為了解決上述問題,可以在moving() 方法上加入@Override 的註解,moving() 就變成一個被標註的覆寫方法,該註解是表示該方法的目的是覆寫父類別的方法,覆寫時可能沒注意到但會由Annotation 機制提醒,透過Java 編譯就會取得錯誤訊息。

public class Cat extends Animal {
	@Override
	public void moving() {
		System.out.println("跑一跑跳一跳");
	}
}

// 錯誤訊息
// method does not override a method from its superclass.

Java 標準註釋

Java 已經在java.lang 套件中定義好三個標準註釋,分別為Override、Deprecated 和SuppressWarnnings。

  1. @Override : 表示此方法覆寫了父類別的方法
  2. @Deprecated : 表示此方法已經過時
  3. @SuppressWarnnings : 告訴編譯器忽視某類別編譯警告
    // 告訴編譯器忽略unchecked 警告訊息
    @SuppressWarnnings("unchecked")
    
    // 告訴編譯器忽略unchecked 和deprecation 警告訊息
    @SuppressWarnnings("unchecked", "deprecation")
    
    // 相當於@SuppressWarnnings("unchecked", "deprecation")
    @SuppressWarnnings(value = {"unchecked", "deprecation"})
    

Spring Boot 核心註釋

Spring Boot 的核心註釋是啟動類上的@SpringBootApplication 註釋,它主要包含了以下三個註釋,實現聲明一個或多個Bean 並啟動自動配置組件掃描的註釋 :

  1. @SpringBootConfiguration : 組合了@Configuration 註釋,實現配置檔案的功能。
  2. @EnableAutoConfiguration : 開啟自動配置的功能,也可以關閉某個自動配置的選項,如想要關閉資料來源自動配置功能@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
  3. @ComponentScan : 用來掃描元件並裝配一些Bean,會根據定義的掃描路徑把符合掃描規則的類別裝配到Spring 容器中。

以下是預設的@SpringBootApplication 註釋的內容。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { 
		@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication

參考網站

Java注解 - 维基百科,自由的百科全书
SpringBootApplication (Spring Boot 2.5.6 API)


上一篇
Day 07 - Spring Boot 常用依賴
下一篇
Day 09 - Spring Boot 常用註釋(下)
系列文
誤打誤撞學了Spring Boot 還當了後端工程師30

尚未有邦友留言

立即登入留言