以下是Spring框架中常用注解的详细分类和说明,涵盖核心组件管理、依赖注入、配置类、AOP、事务管理、Web开发、测试等多个方面:
一、核心组件管理注解
-
@Component
- 作用:通用注解,标记一个类为Spring管理的组件。
- 场景:适用于任何需要被Spring容器管理的类(如工具类、辅助类)。
- 示例:
@Component public class MyComponent { ... }
-
@Service
- 作用:标记业务逻辑层(Service层)组件。
- 场景:用于业务逻辑实现(如用户管理、订单处理)。
- 示例:
@Service public class UserService { ... }
-
@Repository
- 作用:标记数据访问层(DAO层)组件,提供数据访问异常转换。
- 场景:用于数据库交互(如JDBC、JPA操作)。
- 示例:
@Repository public class UserRepository { ... }
-
@Controller
- 作用:标记Web层控制器,处理HTTP请求。
- 场景:用于Spring MVC控制器(如接收请求并返回视图)。
- 示例:
@Controller public class UserController { ... }
-
@RestController
- 作用:组合注解,相当于
@Controller
和@ResponseBody
的组合。 - 场景:用于RESTful API开发,直接返回JSON数据。
- 示例:
@RestController public class ApiController { ... }
- 作用:组合注解,相当于
二、依赖注入注解
-
@Autowired
- 作用:自动注入依赖,按类型匹配。
- 场景:字段、构造器、Setter方法注入。
- 示例:
@Autowired private UserRepository userRepository;
-
@Qualifier
- 作用:与
@Autowired
配合使用,指定注入的Bean名称。 - 场景:解决多个同类型Bean的注入歧义。
- 示例:
@Autowired @Qualifier("mysqlDataSource") private DataSource dataSource;
- 作用:与
-
@Resource
- 作用:JSR-250标准注解,按名称匹配注入。
- 场景:类似
@Autowired
,但优先按名称匹配。 - 示例:
@Resource(name = "orderService") private OrderService orderService;
-
@Inject
- 作用:JSR-330标准注解,功能类似
@Autowired
。 - 场景:跨框架依赖注入(如CDI集成)。
- 示例:
@Inject private Address address;
- 作用:JSR-330标准注解,功能类似
三、配置类相关注解
-
@Configuration
- 作用:声明类为配置类,替代XML配置。
- 场景:定义Bean的创建逻辑。
- 示例:
@Configuration public class AppConfig { ... }
-
@Bean
- 作用:声明方法返回值为Bean,注册到Spring容器。
- 场景:在配置类中定义Bean。
- 示例:
@Bean public DataSource dataSource() { return new HikariDataSource(); }
-
@ComponentScan
- 作用:指定包路径扫描组件。
- 场景:自动发现
@Component
、@Service
等注解的类。 - 示例:
@Configuration @ComponentScan(basePackages = "com.example.service") public class AppConfig { ... }
-
@Import
- 作用:导入其他配置类。
- 场景:模块化配置。
- 示例:
@Configuration @Import({DatabaseConfig.class, SecurityConfig.class}) public class MainConfig { ... }
四、AOP相关注解
-
@Aspect
- 作用:声明类为切面类。
- 场景:定义切面逻辑(如日志、事务)。
- 示例:
@Aspect @Component public class LoggingAspect { ... }
-
@Before
、@After
、@Around
- 作用:定义切面的通知类型(前置、后置、环绕)。
- 场景:拦截方法执行。
- 示例:
@Before("execution(* com.example.service.*.*(..))") public void logBefore() { ... }
-
@Pointcut
- 作用:声明切点表达式。
- 场景:复用切点定义。
- 示例:
@Pointcut("execution(* com.example.service.*.*(..))") public void serviceLayer() { }
-
@EnableAspectJAutoProxy
- 作用:开启AspectJ自动代理。
- 场景:启用AOP支持。
- 示例:
@Configuration @EnableAspectJAutoProxy public class AppConfig { ... }
五、事务管理注解
@Transactional
- 作用:声明事务性方法,管理事务传播行为和隔离级别。
- 场景:确保方法执行的原子性。
- 示例:
@Service public class OrderService { @Transactional public void createOrder(Order order) { ... } }
六、作用域和生命周期注解
-
@Scope
- 作用:设置Bean的作用域(如
singleton
、prototype
)。 - 场景:控制Bean的实例化行为。
- 示例:
@Component @Scope("prototype") public class PrototypeBean { ... }
- 作用:设置Bean的作用域(如
-
@PostConstruct
- 作用:Bean初始化后执行的方法。
- 场景:初始化资源(如数据库连接)。
- 示例:
@PostConstruct public void init() { ... }
-
@PreDestroy
- 作用:Bean销毁前执行的方法。
- 场景:释放资源(如关闭连接池)。
- 示例:
@PreDestroy public void destroy() { ... }
七、Web开发相关注解
-
@RequestMapping
- 作用:映射Web请求到处理方法。
- 场景:定义请求路径和HTTP方法。
- 示例:
@RequestMapping(value = "/users", method = RequestMethod.GET) public String getUserList() { ... }
-
@GetMapping
、@PostMapping
等- 作用:HTTP方法快捷注解(如
@GetMapping
对应GET请求)。 - 场景:简化请求映射。
- 示例:
@GetMapping("/users") public String getUsers() { ... }
- 作用:HTTP方法快捷注解(如
-
@PathVariable
- 作用:获取路径参数。
- 场景:RESTful API参数绑定。
- 示例:
@GetMapping("/users/{id}") public String getUser(@PathVariable Long id) { ... }
-
@RequestParam
- 作用:获取请求参数。
- 场景:绑定查询参数。
- 示例:
@GetMapping("/search") public String search(@RequestParam String keyword) { ... }
-
@RequestBody
- 作用:将请求体绑定到方法参数。
- 场景:处理JSON/XML请求体。
- 示例:
@PostMapping("/users") public String createUser(@RequestBody User user) { ... }
-
@ResponseBody
- 作用:将返回值写入HTTP响应。
- 场景:返回JSON/XML数据。
- 示例:
@GetMapping("/data") @ResponseBody public Data getData() { ... }
-
@ControllerAdvice
- 作用:全局处理控制器配置和异常。
- 场景:统一异常处理、数据绑定。
- 示例:
@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ResponseEntity<String> handleException(Exception e) { ... } }
八、测试相关注解
-
@RunWith
- 作用:指定测试运行器(如SpringJUnit4ClassRunner)。
- 场景:集成测试。
- 示例:
@RunWith(SpringRunner.class) public class UserServiceTest { ... }
-
@ContextConfiguration
- 作用:加载ApplicationContext配置。
- 场景:指定配置类或XML文件。
- 示例:
@ContextConfiguration(classes = TestConfig.class) public class UserServiceTest { ... }
九、条件化和环境相关注解
-
@Profile
- 作用:根据环境激活Bean。
- 场景:多环境配置(如开发、生产)。
- 示例:
@Bean @Profile("dev") public DataSource devDataSource() { ... }
-
@Conditional
- 作用:根据条件创建Bean。
- 场景:动态Bean注册。
- 示例:
@Bean @Conditional(WindowsCondition.class) public FileSystemService windowsService() { ... }
十、异步和定时任务注解
-
@EnableAsync
- 作用:开启异步任务支持。
- 场景:启用
@Async
注解。 - 示例:
@Configuration @EnableAsync public class AsyncConfig { ... }
-
@Async
- 作用:声明异步任务方法。
- 场景:方法异步执行。
- 示例:
@Service public class AsyncService { @Async public void asyncMethod() { ... } }
-
@EnableScheduling
- 作用:开启定时任务支持。
- 场景:启用
@Scheduled
注解。 - 示例:
@Configuration @EnableScheduling public class ScheduleConfig { ... }
-
@Scheduled
- 作用:声明定时任务方法。
- 场景:周期性任务(如cron表达式)。
- 示例:
@Scheduled(cron = "0 0 * * * ?") public void scheduledTask() { ... }
十一、其他常用注解
-
@Value
- 作用:注入属性值,支持多种注入方式(如配置文件、环境变量)。
- 场景:属性赋值。
- 示例:
@Value("${app.name}") private String appName;
-
@Lazy
- 作用:延迟初始化Bean。
- 场景:优化启动性能。
- 示例:
@Bean @Lazy public HeavyBean heavyBean() { ... }
-
@Primary
- 作用:解决自动装配歧义,设置首选Bean。
- 场景:多个同类型Bean时指定默认注入。
- 示例:
@Bean @Primary public DataSource primaryDataSource() { ... }
通过合理使用这些注解,开发者可以显著简化配置、提高代码可读性和可维护性,从而提升开发效率。