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;
@Resource JSR-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. 生命周期回调​

注解 作用 示例
@PostConstruct Bean 初始化后执行(相当于 init-method @PostConstruct public void init() { ... }
@PreDestroy Bean 销毁前执行(相当于 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;
相关推荐
m0_7482336411 分钟前
C++与Python:内存管理与指针的对比
java·c++·python
Mintopia14 分钟前
🚀 Next.js Edge Runtime 实践学习指南 —— 从零到边缘的奇幻旅行
前端·后端·全栈
紫荆鱼20 分钟前
设计模式-备忘录模式(Memento)
c++·后端·设计模式·备忘录模式
软件20529 分钟前
【JDK、JRE、JVM】
java·开发语言·jvm
程序员爱钓鱼35 分钟前
Python编程实战 · 基础入门篇 | 字典(dict)
后端·python·ipython
程序员爱钓鱼37 分钟前
Python编程实战 · 基础入门篇 | 集合(set)
后端·python·ipython
m0_7482554138 分钟前
TailwindCSS vs UnoCSS 性能深度对决:究竟快多少?
java
薛家明40 分钟前
easy-query暴打efcore(包括其他所有orm),隐式Group看我如何在子查询做到极致的性能天花板
java·orm·efcore·easy-query·entityframeworkcore·dotnetcore
IT_陈寒1 小时前
Python 3.12震撼发布:5大性能优化让你的代码提速50%,第3点太香了!
前端·人工智能·后端
wudl55661 小时前
JDK 21 API增强详解
java·开发语言·windows