一、組件注解
@Component
:用于標記一個類為 Spring 管理的 Bean,是 Spring 的基本組件注解。Spring 會通過類路徑掃描自動檢測并注冊標記了@Component
的類為 Bean。@Service
:是@Component
的派生注解,用于標記服務層類,表示該類是一個業務邏輯組件。@Repository
:是@Component
的派生注解,用于標記數據訪問層類,表示該類是一個數據訪問組件,通常用于 DAO(Data Access Object)類。@Controller
:是@Component
的派生注解,用于標記控制層類,表示該類是一個 Web 控制器組件,通常用于 Spring MVC 中的控制器類。
二、依賴注入注解
@Autowired
:用于自動注入依賴。Spring 會自動查找匹配的 Bean 并注入到指定的字段、構造方法或 setter 方法中。如果存在多個同類型的 Bean,可以通過@Qualifier
來指定注入的具體 Bean。@Qualifier
:用于指定注入的具體 Bean,當存在多個同類型的 Bean 時,可以通過@Qualifier
來指定注入哪一個 Bean。它通常與@Autowired
一起使用。@Resource
:也是用于依賴注入的注解,它與@Autowired
類似,但@Resource
默認按照名稱進行注入,如果找不到匹配的 Bean,則按照類型進行注入。
三、配置注解
@Configuration
:用于標記一個配置類,表示該類是一個 Spring 配置類,可以替代傳統的 XML 配置文件。@Bean
:用于在配置類的方法上定義 Bean。被@Bean
注解的方法會返回一個 Bean 實例,Spring 會自動注冊該 Bean 到 IoC 容器中。@Import
:用于導入其他配置類,可以將其他配置類中的 Bean 定義引入到當前配置類中。@PropertySource
:用于指定屬性文件的位置,可以加載.properties 文件中的配置屬性到 Spring 的環境變量中。@Value
:用于注入配置文件中的屬性值到字段中。可以通過@Value
注解將配置文件中的屬性值綁定到 Bean 的字段上。
四、AOP 注解
@Aspect
:用于標記一個切面類,表示該類是一個 AOP 切面,包含通知和切入點的定義。@Pointcut
:用于定義切入點表達式,指定哪些連接點匹配該切入點。@Before
:用于定義前置通知,表示在連接點之前執行的通知方法。@AfterReturning
:用于定義后置通知,表示在連接點正常返回后執行的通知方法。@AfterThrowing
:用于定義異常通知,表示在連接點拋出異常后執行的通知方法。@After
:用于定義最終通知,表示在連接點執行完成后(無論是否拋出異常)執行的通知方法。@Around
:用于定義環繞通知,表示在連接點之前和之后都執行的通知方法,可以手動控制連接點的執行。
五、MVC 注解
@Controller
:用于標記控制層類,表示該類是一個 Web 控制器組件,用于處理 HTTP 請求。@RequestMapping
:用于映射 HTTP 請求到處理方法上。可以通過 URL 模式、HTTP 方法等方式來指定請求的映射規則。@GetMapping
:是@RequestMapping
的派生注解,專門用于映射 HTTP GET 請求。@PostMapping
:是@RequestMapping
的派生注解,專門用于映射 HTTP POST 請求。@PutMapping
:是@RequestMapping
的派生注解,專門用于映射 HTTP PUT 請求。@DeleteMapping
:是@RequestMapping
的派生注解,專門用于映射 HTTP DELETE 請求。@RequestParam
:用于綁定 HTTP 請求參數到方法參數上。可以指定參數是否必填、默認值等。@RequestBody
:用于將 HTTP 請求體綁定到方法參數上,通常用于處理 JSON 或 XML 格式的請求數據。@ResponseBody
:用于將方法的返回值作為 HTTP 響應體返回給客戶端,通常用于返回 JSON 或 XML 格式的數據。@RestController
:是@Controller
和@ResponseBody
的組合注解,用于標記 RESTful 風格的控制器類,表示該類中的所有方法的返回值都會作為 HTTP 響應體返回給客戶端。
六、事務注解
@Transactional
:用于聲明式事務管理,可以標注在類或方法上。標注了@Transactional
的方法會在執行時自動開啟事務,并在方法執行完成后根據執行結果提交或回滾事務。
七、示例代碼
以下是一些常用注解的示例代碼:
- 組件注解示例 :
@Component
public class Car {// 類內容
}@Service
public class UserService {// 類內容
}@Repository
public class UserRepository {// 類內容
}@Controller
public class UserController {// 類內容
}
- 依賴注入注解示例 :
@Service
public class UserService {@Autowired@Qualifier("userRepository")private UserRepository userRepository;
}@Repository
public class UserRepository {// 類內容
}
- AOP 注解示例 :
@Aspect
@Component
public class LogAspect {@Pointcut("execution(* com.example.service.*.*(..))")public void servicePointcut() {}@Before("servicePointcut()")public void beforeLog(JoinPoint joinPoint) {System.out.println("方法執行前:" + joinPoint.getSignature().getName());}
}
- MVC 注解示例 :
@RestController
@RequestMapping("/api/users")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/{id}")public User getUser(@PathVariable Long id) {return userService.getUserById(id);}@PostMappingpublic User createUser(@RequestBody User user) {return userService.createUser(user);}
}
- 事務注解示例 :
@Service
public class UserService {@Autowiredprivate UserRepository userRepository;@Transactionalpublic void transferMoney(Account fromAccount, Account toAccount, Double amount) {userRepository.decreaseBalance(fromAccount, amount);userRepository.increaseBalance(toAccount, amount);}
}
八、總結
Spring 提供了大量的注解來簡化開發和配置工作。通過使用這些注解,開發者可以更加方便地定義 Bean、管理依賴關系、配置 AOP、開發 Web 應用以及進行事務管理等。掌握這些常用注解的使用方法,可以提高開發效率,使代碼更加簡潔和直觀。在實際開發中,合理運用 Spring 的注解功能,可以構建出更加高效、可維護的 Spring 應用。