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

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;

相关文章:

  • xLua笔记
  • 【2025年】MySQL面试题总结
  • 【Java学习】关于springBoot的自动配置和起步依赖
  • 【深度学习-Day 4】掌握深度学习的“概率”视角:基础概念与应用解析
  • re题(53)BUUCTF-[ACTF新生赛2020]SoulLike
  • fastapi+vue中的用户权限管理设计
  • 从零开始理解 C++ 后端编程中的分布式系统
  • word怎么删除空白页?word最后一页删不掉怎么办
  • 网络通信领域的基础或流行协议
  • 重载和覆写有什么区别?
  • 开源项目实战学习之YOLO11:ultralytics-cfg-models-nas(十)
  • AVInputFormat 再分析
  • 1penl配置
  • 【LeetCode Hot100】二分查找篇
  • 【Go类库分享】mcp-go Go搭建MCP服务
  • 将Airtable导入NocoDB
  • Python functools.partial 函数深度解析与实战应用
  • 【C/C++】Linux的futex锁
  • 音视频开发技术总结报告
  • 小土堆pytorch数据加载概念以及实战
  • 贵州游船侧翻248名消防员已在搜救
  • 国际观察|韩国在政局多重不确定性中迎接总统选举
  • 金科股份:因信披违规,公司及董事长、总裁、财务负责人等收到行政监管措施决定书
  • 侧记|“五五购物节”启动!最大力度补贴,买买买 “666”
  • 西湖大学2025年上海市综合评价招生简章发布
  • 解放日报:硬科企业由此迈出“市场第一步”