当前位置: 首页 > java >正文

Spring 容器相关的核心注解​

以下是 Spring 容器中用于 ​​Bean 管理、依赖注入、配置控制​​ 的关键注解,按功能分类说明:

​1. Bean 声明与注册​

注解作用示例
@Component通用注解,标记一个类为 Spring Bean(自动扫描注册)

@Component

public class UserService { ... }

@Service专用于业务逻辑层(功能同 @Component,但语义更清晰)

@Service

public class OrderService { ... }

@Repository专用于数据访问层(DAO),自动转换数据库异常为 Spring 统一异常

@Repository

public class UserDao { ... }

@Controller专用于 MVC 控制器层(处理 HTTP 请求)

@Controller

public class UserController { ... }

@RestController@Controller + @ResponseBody(直接返回 JSON/XML)

@RestController

public class ApiController { ... }

@Configuration标记类为配置类(定义 @Bean 方法)

@Configuration

public class AppConfig { ... }

@Bean在配置类中显式声明 Bean(适用于第三方库或复杂对象)

@Bean

public RestTemplate restTemplate() { return new RestTemplate(); }


​2. 依赖注入(DI)​

注解作用示例
@Autowired自动注入依赖(默认按类型匹配,可结合 @Qualifier 按名称匹配)

@Autowired

private UserService userService;

@Qualifier指定具体注入的 Bean 名称(解决多个同类型 Bean 冲突)@Autowired @Qualifier("masterDataSource") private DataSource ds;
@ResourceJSR-250 标准注解,按名称注入(类似 @Autowired + @Qualifier@Resource(name = "slaveDataSource") private DataSource ds;
@Value注入配置文件中的属性或简单值

@Value("${app.timeout}")

private int timeout;


​3. 条件化与作用域控制​

注解作用示例
@Scope定义 Bean 的作用域(如单例、原型、会话等)

@Scope("prototype")

public class Task { ... }

@Lazy延迟初始化 Bean(首次使用时才创建)

@Lazy @Service

public class HeavyService { ... }

@Conditional根据条件决定是否注册 Bean(需实现 Condition 接口)

@Conditional(OnDevEnvCondition.class)

@Bean

public DevTool devTool() { ... }

@Profile指定 Bean 在特定环境(如 dev/test/prod)下生效

@Profile("prod")

@Bean

public DataSource prodDataSource() { ... }


​4. 生命周期回调​

注解作用示例
@PostConstructBean 初始化后执行(相当于 init-method

@PostConstruct

public void init() { ... }

@PreDestroyBean 销毁前执行(相当于 destroy-method

@PreDestroy

public void cleanup() { ... }


​5. 配置与扫描控制​

注解作用示例
@ComponentScan指定 Spring 扫描 Bean 的包路径(用于启动类或配置类)

@ComponentScan("com.example")

public class App { ... }

@Import导入其他配置类或普通类(使其成为 Spring Bean)@Import({DatabaseConfig.class, SecurityConfig.class})
@PropertySource加载外部配置文件(如 application.properties@PropertySource("classpath:custom.properties")

​6. AOP 相关注解​

注解作用示例
@Aspect声明一个切面类@Aspect @Component public class LoggingAspect { ... }
@Before/@After定义通知(Advice)在目标方法执行前/后运行@Before("execution(* com.example.service.*.*(..))")
@Around环绕通知(可控制目标方法是否执行)@Around("@annotation(com.example.LogExecutionTime)")

​7. 测试相关注解​

注解作用示例
@SpringBootTest启动完整的 Spring 容器进行集成测试@SpringBootTest class UserServiceTest { ... }
@MockBean向容器注入 Mock 对象(替代真实 Bean)@MockBean private UserRepository userRepository;

​总结:Spring 容器的核心注解​

  1. ​Bean 注册​​:@Component@Service@Bean@Configuration
  2. ​依赖注入​​:@Autowired@Resource@Value
  3. ​条件控制​​:@Profile@Conditional@Scope
  4. ​生命周期​​:@PostConstruct@PreDestroy
  5. ​配置管理​​:@ComponentScan@PropertySource@Import

补充(与内容主题无关):

如果有一个service接口被2个类实现了,那么只能用@Resource/@Autowired+@Qualifier

@Service("timeQuantumServiceA")
public class TimeQuantumServiceImplA implements TimeQuantumService {}@Service("timeQuantumServiceB")
public class TimeQuantumServiceImplB implements TimeQuantumService {}@Autowired
@Qualifier("timeQuantumServiceA") // 必须指定名称
private TimeQuantumService timeQuantumService;

http://www.xdnf.cn/news/3625.html

相关文章:

  • 19. LangChain安全与伦理:如何避免模型“幻觉“与数据泄露?
  • Linux电源管理(5)_Hibernate和Sleep功能介绍
  • ElasticSearch深入解析(九):Object、Nested、Flattened类型
  • 【RabbitMQ】 RabbitMQ快速上手
  • Python 函数装饰器和闭包(使用装饰器改进“策略”模式)
  • 玩转Docker | 使用Docker部署AI证件照工具
  • 【2025】ORM框架是什么?有哪些常用?Mybatis和Hibernate是什么样的?
  • ES6/ES11知识点
  • wpf CommandParameter 传递MouseWheelEventArgs参数 ,用 MvvmLight 实现
  • Word域操作记录(从1开始的毕业论文格式排版)
  • 神经网络的基本概念与深度解析——基于生物机制的仿生建模与工程实现
  • Spring Boot的GraalVM支持:构建低资源消耗微服务
  • Kubernetes(k8s)学习笔记(四)--入门基本操作
  • 双指针(5)——有效三角形个数
  • 杭电oj(1180、1181)题解
  • “淘宝闪购”提前4天全量,意味着什么?
  • 传奇各职业/战士/法师/道士/手套/手镯/护腕/神秘腰带爆率及出处产出地/圣战/法神/天尊/祈祷/虹魔/魔血
  • Demo02_基于寄存器+标准库开发的项目
  • 传奇各职业/战士/法师/道士/戒指爆率及出处产出地/圣战/法神/天尊/虹魔/魔血/麻痹/超负载/求婚/隐身/传送/复活/护身/祈祷/火焰
  • Linux系统常用命令、标准C库函数和系统调用
  • new和malloc的区别
  • 一场陟遐自迩的 SwiftUI + CoreData 性能优化之旅(上)
  • Redis总结及设置营业状态案例
  • 泰迪杯特等奖案例学习资料:基于CLIP模型微调与知识蒸馏的多模态图文检索系统设计
  • B站Michale_ee——ESP32_IDF SDK——FreeRTOS_7 流数据缓冲区、消息缓冲区
  • Python基于深度学习的网络舆情分析系统(附源码,部署)
  • 基于蒙特卡洛模拟的电路容差分析与设计优化
  • 倒排索引与数据库索引
  • 拆解一个550-800Mhz的LC滤波器内部大图配测试曲线
  • 这款软件的第三方评测:功能、易用性与性能表现如何?