Spring 框架中常用注解的详细解释与应用场景,结合核心功能和实际开发需求进行分类说明:
1.组件定义注解
1.1 @Component
-
作用:通用注解,将普通 Java 类标记为 Spring 管理的 Bean,由容器实例化和管理,相当于 XML 中的
<bean>
标签。 -
应用场景:非特定层次(如工具类、配置类)的组件声明。
-
示例:
@Componentpublic class MyComponent { /* ... */ }
1.2 分层组件注解
@Controller
:标记控制层(Web 层),处理 HTTP 请求并返回视图或数据。@Service
:标记服务层(业务逻辑层),封装复杂业务逻辑。@Repository
:标记数据访问层(DAO 层),处理数据库操作,支持异常转换(如 SQL 异常转 Spring DataAccessException)。- 区别:三者均为
@Component
的特化版本,通过语义化区分层次,增强代码可读性。
1.3 @RestController
-
作用:
@Controller
+@ResponseBody
的组合,用于 RESTful API 开发,方法返回值直接序列化为 JSON/XML。 -
示例:
@RestControllerpublic class UserController { @GetMapping("/user")public User getUser() { /* ... */ }}
2.依赖注入注解
2.1 @Autowired
-
作用:按类型(byType)自动注入依赖,支持字段、构造器、方法注入。若存在多个同类型 Bean,需配合
@Qualifier
指定名称。 -
属性:
required=false
允许依赖为空。 -
示例:
@Servicepublic class UserService {@Autowiredprivate UserRepository userRepo;}
2.2 @Resource
- 作用:按名称(byName)注入,属于 JSR-250 规范。默认按字段名匹配,若无匹配则按类型注入。
- 与
@Autowired
区别:@Autowired
是 Spring 特有,默认按类型注入,需配合@Qualifier
指定名称。@Resource
是 Java EE 标准,更灵活,适用于多实现类场景。
2.3 @Value
-
作用:注入配置文件(如
application.properties
)中的属性值,支持表达式和默认值。 -
示例:
@Value("${app.timeout:30}")private int timeout;
3.配置类与自动装配
3.1 @Configuration
-
作用:标记配置类,替代 XML 配置文件,定义 Bean 的创建逻辑。
-
示例:
@Configurationpublic class AppConfig {@Beanpublic DataSource dataSource() { /* ... */ }}
3.2 @ComponentScan
- 作用:指定 Spring 扫描的包路径,自动注册
@Component
及其派生注解的类为 Bean。 - 与
@SpringBootApplication
关系:@SpringBootApplication
包含@ComponentScan
,默认扫描启动类所在包及其子包。
3.3 @Bean
-
作用:在配置类中定义 Bean,常用于第三方库(如数据库连接池)的实例化。
-
示例:
@Configurationpublic class DataSourceConfig {@Beanpublic DataSource druidDataSource() { return new DruidDataSource(); }}
4.Spring MVC 相关注解
4.1 @RequestMapping
-
作用:映射 HTTP 请求到控制器方法,支持类和方法级路径,可指定请求方法(GET/POST 等)。
-
简化注解:
@GetMapping
、@PostMapping
等,语义更明确。 -
示例:
@Controller@RequestMapping("/api")public class ApiController {@GetMapping("/users")public String listUsers() { /* ... */ }}
4.2 参数绑定注解
@PathVariable
:绑定 URL 路径变量到方法参数。
@GetMapping("/user/{id}")public User getUser(@PathVariable Long id) { /* ... */ }
-
@RequestParam
:绑定请求参数到方法参数,支持默认值。 -
@RequestBody
:将请求体 JSON 反序列化为 Java 对象。
5.条件注解与高级特性
5.1 @Conditional
系列
- 作用:根据条件动态装配 Bean,如
@ConditionalOnClass
(类路径存在时生效)、@ConditionalOnMissingBean
(容器中无该 Bean 时生效)。 - 应用场景:Spring Boot 自动配置的核心机制。
5.2 AOP 相关注解
@Aspect
:定义切面类。@Before
/@After
/@Around
:定义通知类型,控制切面执行时机。
5.3 生命周期回调
@PostConstruct
:Bean 初始化后执行的方法。@PreDestroy
:Bean 销毁前执行的方法。
6.Spring Boot 核心注解
6.1 @SpringBootApplication
- 组成:
@Configuration
+@EnableAutoConfiguration
+@ComponentScan
,标记主启动类。 - 作用:启用自动配置、组件扫描和配置类定义。
6.2 @EnableAutoConfiguration
- 原理:根据类路径依赖自动配置 Bean(如引入
spring-boot-starter-web
自动配置 Tomcat 和 Spring MVC)。
7.总结
- 组件分层:通过
@Controller
、@Service
、@Repository
明确代码职责。 - 依赖管理:优先使用
@Autowired
按类型注入,多实现场景用@Qualifier
或@Resource
。 - 配置简化:
@Configuration
+@Bean
替代 XML,@SpringBootApplication
整合启动逻辑。 - RESTful 开发:
@RestController
+@RequestBody
/@PathVariable
构建 API。
通过合理使用这些注解,可显著减少配置代码,提升开发效率和代码可维护性。