Java Spring 注解(Annotations)是 Spring 框架中用于简化配置和增强代码可读性的元数据标记。它们通过声明式编程替代传统 XML 配置,让开发者直接在 Java 类或方法上定义行为(如依赖注入、事务管理、组件扫描等)。以下是 Spring 注解的核心分类及典型示例:
🌟 一、核心注解(定义与装配 Bean)
注解 | 作用 | 示例代码片段 |
---|
@Component | 通用注解,标记一个类为 Spring Bean(自动扫描并装配) | @Component public class UserService {...} |
@Controller | 标记 MVC 控制器(@Component 的特化) | @Controller public class UserController {...} |
@Service | 标记业务逻辑层组件(@Component 的特化) | @Service public class OrderService {...} |
@Repository | 标记数据访问层(DAO)组件,自带异常转换(如 SQLException → DataAccessException ) | @Repository public class UserDaoImpl {...} |
@Autowired | 自动注入依赖(按类型匹配),可用于构造器/字段/Setter 方法 | @Autowired private UserDao userDao; |
@Qualifier | 与 @Autowired 配合,按名称指定注入的 Bean | @Autowired @Qualifier("mysqlDao") private DatabaseDao dbDao; |
@Bean | 在配置类中声明方法返回的对象为 Bean(用于第三方库集成) | @Configuration
public class AppConfig {
@Bean public DataSource dataSource() { ... }
} |
@Configuration | 标记类为配置类(替代 XML),包含 @Bean 定义 | @Configuration
@ComponentScan("com.example")
public class AppConfig { ... } |
@ComponentScan | 配置自动扫描的包路径(发现 @Component 等注解) | @ComponentScan(basePackages = "com.example.services") |
🔄 二、作用域与生命周期
注解 | 说明 |
---|
@Scope | 定义 Bean 作用域(如 singleton 、prototype ) |
@PostConstruct | 初始化方法(Bean 创建后执行) |
@PreDestroy | 销毁方法(Bean 销毁前执行) |
🌐 三、Web 开发注解(Spring MVC)
注解 | 用途 |
---|
@RequestMapping | 映射 HTTP 请求到控制器方法(支持 RESTful 路径) |
@GetMapping | 简化 GET 请求映射(@RequestMapping(method=GET) 的快捷方式) |
@PostMapping | 映射 POST 请求 |
@ResponseBody | 将方法返回值直接写入 HTTP 响应体(如返回 JSON/XML) |
@RestController | @Controller + @ResponseBody (适用于 REST API) |
@PathVariable | 从 URL 路径中提取变量 |
@RequestParam | 从请求参数中获取值 |
@RequestBody | 将 HTTP 请求体解析为对象(如 JSON → Java 对象) |
⚙️ 四、事务与 AOP
注解 | 功能 |
---|
@Transactional | 声明式事务管理(标注方法/类,自动开启提交/回滚) |
@EnableAspectJAutoProxy | 启用 AspectJ 自动代理(支持 @Aspect 注解) |
@Aspect | 定义切面类(包含通知和切点) |
@Before /@After | AOP 通知类型(方法执行前/后执行) |
🔧 五、条件化配置(Spring Boot 扩展)
注解 | 说明 |
---|
@ConditionalOnClass | 当类路径存在指定类时生效 |
@Profile | 根据激活的 Profile 加载配置(如 dev /prod ) |
💡 关键特点
- 取代 XML 配置
如用 @ComponentScan
替代 <context:component-scan>
。 - 运行时生效
注解由 Spring 容器在启动时解析并应用。 - 组合注解
Spring Boot 的 @SpringBootApplication
= @Configuration
+ @ComponentScan
+ @EnableAutoConfiguration
。 - 可扩展性
支持自定义注解(如 @MyCustomAnnotation
)结合 Spring 元注解(如 @Component
)。
注:Spring Boot 在核心注解基础上提供了更多自动化配置注解(如 @EnableAutoConfiguration
),进一步简化开发。