
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睿哥
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。