总结一下,核心注解涵盖以下方面:
- 依赖注入相关注解
- Bean定义和组件扫描注解
- 配置类相关注解
- 条件化配置注解
- 作用域和生命周期注解
- AOP相关注解
- 事务管理注解
- 属性注入相关注解
- 测试相关注解
- Spring Boot核心注解(如果需要)
每个部分列出注解名称,简要说明作用,并给出代码示例。这样用户能够全面了解Spring的核心注解,并在实际开发中正确应用。
以下是 Spring 框架中 核心注解 的分类整理,涵盖依赖注入、配置管理、Bean 声明等核心功能:
一、依赖注入(Dependency Injection)
注解 | 作用 | 示例 |
---|
@Autowired | 自动注入 Bean,默认按类型匹配。可标注在字段、构造函数或方法上。 | @Autowired private UserService userService; |
@Qualifier | 按名称指定注入的 Bean,用于解决多个同类型 Bean 的冲突。 | @Autowired @Qualifier("userServiceImplA") UserService userService; |
@Resource | JSR-250 标准注解,按名称注入(类似 @Autowired + @Qualifier )。 | @Resource(name = "userDao") private UserDao userDao; |
@Value | 注入配置文件属性或 SpEL 表达式结果。 | @Value("${app.name}") private String appName; |
二、Bean 声明与组件扫描
注解 | 作用 | 示例 |
---|
@Component | 通用注解,标记类为 Spring Bean(需被组件扫描)。 | @Component public class UserService { ... } |
@Service | 标注服务层组件(功能同 @Component ,语义更明确)。 | @Service public class UserServiceImpl implements UserService {} |
@Repository | 标注数据访问层组件(DAO 层),自动处理数据库异常。 | @Repository public class UserDaoImpl implements UserDao {} |
@Controller | 标注控制器层组件(Spring MVC)。 | @Controller public class UserController { ... } |
@Configuration | 标记类为配置类,定义 Bean。 | @Configuration public class AppConfig { ... } |
@Bean | 在配置类中定义 Bean,方法名默认作为 Bean 名称。 | @Bean public DataSource dataSource() { return new HikariDataSource(); } |
三、配置与条件化
注解 | 作用 | 示例 |
---|
@Conditional | 根据条件决定是否注册 Bean(需实现 Condition 接口)。 | @Conditional(OnProductionEnvCondition.class) |
@Profile | 根据环境配置激活 Bean(如 dev , prod )。 | @Profile("dev") public class DevConfig { ... } |
@ConditionalOnClass | Spring Boot 条件注解,类路径存在指定类时生效。 | @ConditionalOnClass(RedisTemplate.class) |
@ConditionalOnMissingBean | 容器中不存在指定 Bean 时生效。 | @Bean @ConditionalOnMissingBean public CacheManager cacheManager() { ... } |
四、作用域与生命周期
注解 | 作用 | 示例 |
---|
@Scope | 定义 Bean 的作用域(如 singleton , prototype )。 | @Scope("prototype") public class TaskProcessor { ... } |
@PostConstruct | JSR-250 注解,Bean 初始化后执行的方法。 | @PostConstruct public void init() { ... } |
@PreDestroy | JSR-250 注解,Bean 销毁前执行的方法。 | @PreDestroy public void cleanup() { ... } |
@Lazy | 延迟初始化 Bean(首次使用时创建)。 | @Lazy @Service public class HeavyService { ... } |
五、AOP 与事务
注解 | 作用 | 示例 |
---|
@Aspect | 定义切面类,结合 @Pointcut 和通知注解(@Before , @After 等)。 | @Aspect @Component public class LoggingAspect { ... } |
@Transactional | 声明式事务管理,标注在类或方法上。 | @Transactional(rollbackFor = Exception.class) |
六、Web 相关(Spring MVC)
注解 | 作用 | 示例 |
---|
@RequestMapping | 映射 HTTP 请求到控制器方法(支持 REST 方法简写如 @GetMapping )。 | @GetMapping("/users") public List<User> getUsers() { ... } |
@RequestBody | 将请求体内容(如 JSON)绑定到方法参数。 | @PostMapping("/users") public void createUser(@RequestBody User user) { ... } |
@ResponseBody | 将方法返回值直接写入响应体(如返回 JSON)。 | @ResponseBody @GetMapping("/info") public User getUser() { ... } |
@RestController | 组合 @Controller + @ResponseBody ,用于 REST API。 | @RestController public class UserApiController { ... } |
七、测试相关
注解 | 作用 | 示例 |
---|
@SpringBootTest | Spring Boot 测试类,加载完整应用上下文。 | @SpringBootTest class UserServiceTest { ... } |
@MockBean | 在测试中注入 Mock Bean。 | @MockBean private UserRepository userRepository; |
@Test | JUnit 测试方法。 | @Test void testCreateUser() { ... } |
八、Spring Boot 核心注解
注解 | 作用 | 示例 |
---|
@SpringBootApplication | 组合 @Configuration + @EnableAutoConfiguration + @ComponentScan ,标记主启动类。 | @SpringBootApplication public class MyApp { ... } |
@EnableAutoConfiguration | 启用 Spring Boot 自动配置。 | @EnableAutoConfiguration |
总结
掌握这些核心注解是使用 Spring 框架的基础,合理运用它们可以极大简化开发:
- 依赖注入:
@Autowired
, @Resource
, @Value
- Bean 声明:
@Component
, @Service
, @Bean
- 配置管理:
@Configuration
, @Profile
, @Conditional
- Web 开发:
@RestController
, @RequestMapping
- 事务与AOP:
@Transactional
, @Aspect
结合具体场景灵活使用,能显著提升代码的可维护性和扩展性。