Spring框架提供了多种注解,用于简化配置和管理Spring应用程序的组件,下面详解Spring常用注解@mikechen
@Component
@Component
是一个通用的注解,用于将一个类标记为Spring容器管理的组件。
如下所示:
@Component public class MyComponent { // Class implementation }
这个注解通常用于自动扫描组件,将其纳入Spring容器的管理。
其他特定组件注解如 @Service
, @Repository
, @Controller
等都派生自 @Component
。
@Service
@Service
注解用于标记一个类为服务层的组件,它通常用于标识业务逻辑层的类,表示这些类提供业务服务。
如下所示:
@Service public class MyService { // Service class implementation }
通常与 @Autowired
注解一起用于自动注入服务层的Bean。
@Repository
@Repository 注解用于标记一个类为持久层的组件,它通常用于标识数据访问层的类,表示这些类负责与数据库或其他数据源进行交互。
如下所示:
@Repository public class MyRepository { // Data access class implementation }
@Controller
@Controller 注解用于标记一个类为控制器组件,它通常用于标识控制器类,表示这些类处理HTTP请求。
如下所示:
@Controller public class MyController { @RequestMapping("/myendpoint") public String handleRequest() { // Request handling logic return "viewName"; } }
@Controller 通常用于Spring MVC中的控制器类。
@Autowired
@Autowired
用于实现自动装配,即将依赖的Bean自动注入到属性、构造函数或方法参数中,无需显式配置依赖关系。
如下所示:
@Component public class MyService { private MyRepository repository; @Autowired public MyService(@Qualifier("myRepositoryImpl") MyRepository repository) { this.repository = repository; } }
@Qualifier
@Qualifier
通常与 @Autowired
配合使用,用于解决多个类型相同的Bean的依赖注入问题。
如下所示:
@Component public class MyService { private MyRepository repository; @Autowired public MyService(@Qualifier("myRepositoryImpl") MyRepository repository) { this.repository = repository; } }
@Value
@Value
用于注入一个特定的值,如配置属性或常量,到Spring Bean中的字段、属性或方法参数。
如下所示:
@Component public class MyConfig { @Value("${my.property}") private String myProperty; }
@Configuration
@Configuration
用于标记一个类为配置类,通常与 @Bean
注解一起使用,用于定义Bean的创建和配置。
如下所示:
@Configuration public class MyConfig { @Bean public MyBean myBean() { return new MyBean(); } }
@ComponentScan
@ComponentScan
用于启用组件扫描功能,自动扫描标记有 @Component
及其派生注解的类,并将它们注册为Spring Bean。
如下所示:
@Configuration @ComponentScan("com.example") public class MyConfig { // 自动扫描com.example包下的所有@Component类 }
@Scope
@Scope
用于定义Bean的作用域,如单例、原型、会话等。默认为单例。
如下所示:
@Component @Scope("prototype") public class MyPrototypeBean { // This bean has prototype scope }
@Aspect
@Aspect
用于定义切面,结合其他AOP相关注解,如 @Before
, @After
, @Around
,来实现切面编程。
如下所示:
@Aspect @Component public class MyAspect { @Before("execution(* com.example.service.*.*(..))") public void beforeServiceMethod() { // Advice code before a service method } }
@Transactional
@Transactional
用于声明事务管理,通常应用于Service层的方法,以实现声明式事务。
如下所示:
@Service public class MyService { @Transactional public void performTransaction() { // Transactional method } }
@RequestMapping
@RequestMapping
用于定义控制器中的处理方法的映射路径,通常用于Spring MVC控制器。
如下所示:
@Controller @RequestMapping("/mycontroller") public class MyController { @RequestMapping("/myendpoint") public String handleRequest() { // Request handling logic return "viewName"; } }
@PathVariable
@PathVariable
用于从URL路径中获取变量值,通常用于RESTful风格的请求处理。
如下所示:
@Controller @RequestMapping("/products") public class ProductController { @GetMapping("/{productId}") public String getProductDetails(@PathVariable Long productId, Model model) { // 使用productId来加载特定产品的详情 // ... return "product-details"; } }
@RequestParam
@RequestParam
用于从请求参数中获取变量值,通常用于处理HTTP请求中的参数。
如下所示:
@Controller @RequestMapping("/products") public class ProductController { @GetMapping("/search") public String searchProducts(@RequestParam("keyword") String keyword, Model model) { // 使用keyword来搜索产品 // ... return "search-results"; } }
@ResponseBody
@ResponseBody
用于将方法的返回值直接作为HTTP响应体返回,通常用于RESTful服务。
如下所示:
@RestController @RequestMapping("/api/products") public class ProductApiController { @GetMapping("/{productId}") @ResponseBody public Product getProductDetails(@PathVariable Long productId) { // 返回产品信息作为JSON响应 // ... return product; } }
这些注解通常与Spring MVC一起使用,用于处理Web请求和构建RESTful API。
@PathVariable
用于从URL路径中提取变量值,@RequestParam
用于获取查询参数的值,而 @ResponseBody
用于将方法返回值作为HTTP响应的内容。
mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!

后台回复【架构】即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》