Spring 注解总结(场景 + 用法 + 替代 XML)
·
📘 Spring 注解配置完全指南(随用随查)

一、定义 Bean 相关注解
1. @Component / @Controller / @Service / @Repository
✅ 应用场景
- @Component:通用注解,用于任何 Spring 管理的 Bean
- @Controller:标注在控制层(Spring MVC)类上
- @Service:标注在业务层类上
- @Repository:标注在持久层(DAO)类上,自带异常转换功能
✅ 使用方法
@Component
public class CommonBean {}
@Controller
public class UserController {}
@Service
public class UserService {}
@Repository
public class UserDao {}
✅ 替代的 XML 配置
<bean id="userController" class="com.example.UserController"/>
<bean id="userService" class="com.example.UserService"/>
<bean id="userDao" class="com.example.UserDao"/>
2. @ComponentScan
✅ 应用场景
- 配置 Spring 自动扫描的包路径,让注解生效
✅ 使用方法
@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
}
或在 Spring Boot 启动类上:
@SpringBootApplication // 内含 @ComponentScan
public class Application {}
✅ 替代的 XML 配置
<context:component-scan base-package="com.example"/>
二、依赖注入相关注解
1. @Autowired
✅ 应用场景
- 自动装配 Bean,默认按类型注入
✅ 使用方法
@Component
public class UserService {
@Autowired // 字段注入
private UserDao userDao;
@Autowired // 构造器注入(推荐)
public UserService(UserDao userDao) {
this.userDao = userDao;
}
@Autowired // Setter注入
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
✅ 替代的 XML 配置
<!-- setter注入 -->
<bean id="userService" class="com.example.UserService">
<property name="userDao" ref="userDao"/>
</bean>
<!-- 构造器注入 -->
<bean id="userService" class="com.example.UserService">
<constructor-arg ref="userDao"/>
</bean>
<!-- 自动装配 -->
<bean id="userService" class="com.example.UserService" autowire="byType"/>
2. @Qualifier
✅ 应用场景
- 当同一类型有多个 Bean 时,配合
@Autowired指定具体注入哪个 Bean
✅ 使用方法
@Component
public class UserService {
@Autowired
@Qualifier("userDaoImpl") // 指定注入 id 为 userDaoImpl 的 Bean
private UserDao userDao;
}
✅ 替代的 XML 配置
<bean id="userService" class="com.example.UserService">
<property name="userDao" ref="userDaoImpl"/> <!-- ref 指定具体 Bean -->
</bean>
3. @Value
✅ 应用场景
- 注入简单类型值(字符串、基本类型),通常用于读取配置文件
✅ 使用方法
@Component
public class JdbcConfig {
@Value("${jdbc.url}") // 读取 properties 文件
private String url;
@Value("3306") // 直接赋值
private int port;
@Value("#{systemProperties['user.home']}") // SpEL 表达式
private String userHome;
}
✅ 替代的 XML 配置
<bean id="jdbcConfig" class="com.example.JdbcConfig">
<property name="url" value="${jdbc.url}"/>
<property name="port" value="3306"/>
</bean>
三、配置第三方 Bean 相关注解
@Bean
✅ 应用场景
- 在配置类中声明第三方库的 Bean(如数据源、Redis 客户端等)
✅ 使用方法
@Configuration
public class AppConfig {
@Bean
public DataSource dataSource() {
DruidDataSource ds = new DruidDataSource();
ds.setUrl("jdbc:mysql://localhost:3306/test");
ds.setUsername("root");
ds.setPassword("123456");
return ds;
}
}
✅ 替代的 XML 配置
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
四、作用范围相关注解
@Scope
✅ 应用场景
- 设置 Bean 的作用范围:singleton(默认)、prototype、request、session 等
✅ 使用方法
@Component
@Scope("prototype") // 每次获取都创建新实例
public class PrototypeBean {
}
✅ 替代的 XML 配置
<bean id="prototypeBean" class="com.example.PrototypeBean" scope="prototype"/>
五、生命周期相关注解
1. @PostConstruct
✅ 应用场景
- 指定 Bean 初始化完成后执行的方法
✅ 使用方法
@Component
public class InitBean {
@PostConstruct
public void init() {
System.out.println("Bean 初始化完成,执行此方法");
}
}
✅ 替代的 XML 配置
<bean id="initBean" class="com.example.InitBean" init-method="init"/>
2. @PreDestroy
✅ 应用场景
- 指定 Bean 销毁前执行的方法(仅适用于 singleton 作用域)
✅ 使用方法
@Component
public class DestroyBean {
@PreDestroy
public void cleanup() {
System.out.println("Bean 销毁前,执行清理操作");
}
}
✅ 替代的 XML 配置
<bean id="destroyBean" class="com.example.DestroyBean" destroy-method="cleanup"/>
六、所有注解对比总结表
| 注解 | 应用场景 | 使用方法 | 替代的 XML 配置 |
|---|---|---|---|
| @Component | 通用 Bean 定义 | @Component public class A {} |
<bean class="A"/> |
| @Controller | 控制层 Bean | @Controller public class A {} |
<bean class="A"/> |
| @Service | 业务层 Bean | @Service public class A {} |
<bean class="A"/> |
| @Repository | 持久层 Bean | @Repository public class A {} |
<bean class="A"/> |
| @ComponentScan | 配置扫描包路径 | @ComponentScan("com.example") |
<context:component-scan.../> |
| @Autowired | 自动装配依赖 | @Autowired private A a; |
<property>、<constructor-arg>、autowire |
| @Qualifier | 指定注入的 Bean 名称 | @Qualifier("aImpl") |
ref="aImpl" |
| @Value | 注入简单类型值 | @Value("${key}") |
<property name="" value=""/> |
| @Bean | 配置第三方 Bean | @Bean public DataSource ds() {} |
<bean class="..."/> |
| @Scope | 设置作用范围 | @Scope("prototype") |
scope="prototype" |
| @PostConstruct | 初始化方法 | @PostConstruct public void init() {} |
init-method="init" |
| @PreDestroy | 销毁方法 | @PreDestroy public void destroy() {} |
destroy-method="destroy" |
以上内容涵盖了图片中所有注解的详细总结,每个注解都按照应用场景、使用方法、替代 XML 配置三个维度展开,最后用表格做了对比。如果有需要调整的地方,随时告诉我。
更多推荐



所有评论(0)