注解配置化开发重在理解“为什么用、如何起作用、与xml/javaconfig分工、spring boot中自动装配机制及自定义注解设计逻辑”。

注解不是魔法,是元数据+处理机制的组合
面试官常会问:“@Autowired到底怎么工作的?”如果你只答“Spring自动注入”,就停在表面了。得讲清楚三层:
- 声明层:@Autowired是运行时注解(@Retention(RUNTIME)),标记在字段/方法/构造器上,本身不执行任何逻辑;
- 识别层:Spring容器启动时,通过BeanPostProcessor(如AutowiredAnnotationBeanPostProcessor)扫描所有Bean,找到带该注解的成员;
- 执行层:根据类型或名称匹配IOC容器中的Bean,完成依赖注入——这背后依赖的是Spring的反射 + BeanFactory + DependencyDescriptor协作。
注解和XML、JavaConfig不是替代关系,而是分工关系
很多候选人误以为“用了注解就不用XML”,其实Spring的设计哲学是混合使用、各取所长:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- XML适合全局性、结构性配置:比如事务管理器定义、AOP切点表达式、多数据源路由规则——写在XML里更集中、易复审;
- 注解适合细粒度、贴近业务的声明:@Service标识服务层、@Transactional标注方法级事务、@Valid做参数校验——离代码近,语义明确;
- JavaConfig(@Configuration + @Bean)适合需要编程逻辑的Bean构建:比如根据环境动态创建不同DataSource、封装第三方SDK客户端——这时注解无法表达条件分支,必须靠Java代码。
Spring Boot里注解驱动的本质是“自动发现 + 条件装配”
面试高频陷阱题:“@SpringBootApplication干了什么?”不能只答“是个组合注解”。要拆开看它如何让注解真正“活起来”:
- @ComponentScan → 让@Controller/@Service这些注解被扫描到并注册为Bean;
- @EnableAutoConfiguration → 触发AutoConfigurationImportSelector去读取META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,加载上百个自动配置类;
- 每个自动配置类都用@ConditionalOnClass、@ConditionalOnMissingBean等做守门人,确保“有Redis依赖才配RedisTemplate,没配redis.url就不生效”——这才是注解配置化的核心保障。
自定义注解要关注“谁来读、何时读、怎么读”
如果被问到“写一个日志埋点注解@Trace”,光贴代码不够,得说明设计意图:
- 用@Target(ElementType.METHOD)限定只能标在方法上;
- 用@Retention(RetentionPolicy.RUNTIME)保证运行时可通过反射拿到;
- 配套写一个Aspect切面(而非注解处理器),在方法执行前后织入日志逻辑;
- 如果还想支持异步或采样率,就得加属性如
boolean async() default false和double rate() default 1.0,并在切面里解析使用。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










