小伙伴们大家好,做过几个项目之后来总结下常用的注解以及使用方式
目录
一、Spring的常见注解
1. 声明相关
1.1 @Component
@Component注解用于将一个类标记为Spring容器中的组件。这个注解很广泛地应用于各种类型的对象,例如服务、资源等。示例:
@Component
public class MyComponent {
// 这里的MyComponent类将被Spring容器实例化,并且可以在其他组件中使用@Autowired注解来引用它。
// 比如 @Autowired private MyComponent myComponent;
}
1.2 @Service
@Service注解用于标记一个类作为业务逻辑层的服务组件。示例:
@Service
public class MyService {
// 这里的MyService类将被Spring容器实例化,并且可以在其他组件中使用@Autowired注解来引用它。
// 比如 @Autowired private MyService myService;
}
1.3 @Repository
@Repository注解用于标记一个类作为数据访问层的持久化组件。示例:
@Repository
public class MyRepositoryImpl implements MyRepository {
// 这里的MyRepositoryImpl类将被Spring容器实例化,并且可以在其他组件中使用@Autowired注解来引用它。
}
1.4 @Controller
@Controller注解用于标记一个类作为Spring MVC中的控制器。示例:
@Controller
public class MyController {
// 这里的MyController类将被Spring MVC框架识别为控制器,并且可以处理特定URL的请求。
}
2. 依赖注入相关
2.1 @Autowired
@Autowired注解用于自动装配依赖关系。这个注解可以应用于构造函数、字段、setter方法和任意方法上。示例:
@Component
public class MyService {
@Autowired
private MyRepository myRepository;
// 这里的MyService类中的MyRepository字段会自动注入一个MyRepository类型的bean,这个bean必须在Spring容器中存在。
}
2.2 @Qualifier
@Qualifier注解用于指定具体的依赖对象,当多个相同类型的bean存在时使用。它通常与@Autowired注解一起使用。示例:
@Service
public class MyServiceImpl implements MyService {
@Autowired
@Qualifier("myRepository2")
private MyRepository myRepository;
// 这里的@Qualifier注解指定了要注入的是名为"myRepository2"的MyRepository类型的bean。
}
2.3 @Resource
@Resource注解用于注入依赖对象,它可以根据名称进行自动装配。示例:
@Component
public class MyService {
@Resource
private MyRepository myRepository;
// 这里的MyRepository类型的依赖对象会被自动注入到MyService类中的myRepository字段中,它根据字段名"myRepository"来匹配容器中的bean。
}
3. 作用域相关
3.1 @Scope
@Scope注解用于指定bean的作用域。Spring容器会根据这个注解来管理bean的生命周期。示例:
@Component
@Scope("prototype")
public class MyPrototypeBean {
// 这里的MyPrototypeBean类被标记为prototype作用域,每次从容器中获取该bean时都会创建一个新的实例。
}
4. 配置相关
4.1 @Configuration
@Configuration注解用于标记一个类为配置类,通常与@Bean注解一起使用。示例:
@Configuration
public class AppConfig {
@Bean
public MyBean myBean() {
return new MyBean();
}
// 这里的@Configuration指令告诉Spring容器,该类是一个配置类,其中的@Bean指令告诉Spring容器,要创建一个名为"myBean"的bean,并返回一个新的MyBean实例。
}
4.2 @ComponentScan
@ComponentScan注解用于启用组件扫描,自动扫描并注册带有特定注解的组件。它通常与@Configuration注解一起使用。示例:
@Configuration
@ComponentScan("com.example")
public class AppConfig {
// 这里的@ComponentScan指令告诉Spring扫描com.example包及其子包以查找被标记为组件的类。
}
4.3 @Bean
@Bean注解用于声明一个方法返回一个由Spring容器管理的bean。这个注解通常与@Configuration注解一起使用。示例:
@Configuration
public class AppConfig {
@Bean
public MyBean myBean() {
return new MyBean();
}
// 这里的@Bean指令告诉Spring容器,要创建一个名为"myBean"的bean,并返回一个新的MyBean实例。
}
5. aop相关
5.1 @Aspect
@Aspect注解用于标记一个类为切面类。切面类定义了一系列切点和通知,用于在特定的连接点执行额外的逻辑。示例:
@Aspect
@Component
public class LoggingAspect {
// 这里的LoggingAspect类被标记为切面类,在Spring容器中实例化。它可以定义切点和通知方法。
}
5.2 @Before
@Before注解用于指定一个前置通知,在目标方法执行之前执行。示例:
@Aspect
@Component
public class LoggingAspect {
@Before("serviceMethods()")
public void beforeAdvice() {
System.out.println("Before advice executed");
}
// 这里的beforeAdvice()方法被定义为一个前置通知,在切点serviceMethods()匹配的方法执行之前打印一条消息。
}
5.3 @After
@After注解用于指定一个后置通知,在目标方法执行之后执行。示例:
@Aspect
@Component
public class LoggingAspect {
@After("serviceMethods()")
public void afterAdvice() {
System.out.println("After advice executed");
}
// 这里的afterAdvice()方法被定义为一个后置通知,在切点serviceMethods()匹配的方法执行之后打印一条消息。
}
5.4 @Around
@Around注解用于指定一个环绕通知,可以在目标方法执行前后都添加额外逻辑。这个通知可以完全控制目标方法的执行,包括是否执行目标方法以及如何处理返回值。示例:
@Aspect
@Component
public class LoggingAspect {
@Around("serviceMethods()")
public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("Before method execution");
Object result = joinPoint.proceed();
System.out.println("After method execution");
return result;
}
// 这里的aroundAdvice()方法被定义为一个环绕通知,它在切点serviceMethods()匹配的方法执行前后分别打印消息,并且通过joinPoint.proceed()调用执行目标方法。
}
5.5 @Pointcut
@Pointcut注解用于定义一个切点,即在程序执行过程中进行拦截的特定位置。它通常与@Before、@After等注解一起使用。示例:
@Aspect
@Component
public class LoggingAspect {
@Pointcut("execution(public * com.example.service.*.*(..))")
public void serviceMethods() {}
// 这里的serviceMethods()方法被定义为一个切点,它匹配com.example.service包中所有公共方法的执行。
}
二、SpringMVC常见注解
1.@RequestMapping
@RequestMapping注解用于将HTTP请求映射到控制器的处理方法。它可以指定请求的路径、HTTP方法、请求参数等信息。示例:
@Controller
@RequestMapping("/users")
public class UserController {
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public User getUserById(@PathVariable Long id) {
// 这里的@RequestMapping注解将GET请求映射到/users/{id}路径,并调用getUserById()方法来处理请求。
}
}
2.@RequestBody
@RequestBody注解用于将HTTP请求的请求体转换为方法参数对象。示例:
@PostMapping("/users")
public void createUser(@RequestBody User user) {
// 这里的@RequestBody注解将请求体中的JSON数据转换为User对象,并作为方法参数传递给createUser()方法。
}
3.@RequestParam
@RequestParam注解用于从HTTP请求中获取参数值,并将其作为方法参数传递。示例:
@GetMapping("/users")
public List<User> getUsers(@RequestParam(name = "page", defaultValue = "1") int page) {
// 这里的@RequestParam注解用于获取名为"page"的请求参数,并将其作为page参数传递给getUsers()方法。
}
4.@PathVariable
@PathVariable注解用于从URL中提取参数值,并将其作为方法参数传递。示例:
@GetMapping("/users/{id}")
public User getUserById(@PathVariable Long id) {
// 这里的@PathVariable注解将URL中的{id}占位符提取为id参数,并传递给getUserById()方法。
}
5.@ResponseBody
@ResponseBody注解用于将方法返回的对象转换为HTTP响应体。示例:
@GetMapping("/users/{id}")
@ResponseBody
public User getUserById(@PathVariable Long id) {
// 这里的@ResponseBody注解将getUserById()方法返回的User对象转换为HTTP响应体。
}
6.@RestController
@RestController注解是@Controller和@ResponseBody的组合,用于标记一个类为RESTful风格的控制器。示例:
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping("/")
public List<User> getUsers() {
}
// 这里的@RestController注解将UserController类标记为RESTful风格的控制器,它的所有处理方法都返回对象作为HTTP响应。
}
7.@RequestHeader
@RequestHeader注解用于获取HTTP请求头中的值,并将其作为方法参数传递。示例:
@GetMapping("/users")
public List<User> getUsers(@RequestHeader("Authorization") String token) {
// 这里的@RequestHeader注解用于获取名为"Authorization"的请求头的值,并将其作为token参数传递给getUsers()方法。
}
8.@GetMapping/@PostMapping
@GetMapping和@PostMapping是@RequestMapping的缩写形式,分别用于处理GET和POST请求。示例:
@GetMapping("/users")
public List<User> getUsers() {
// ...
}
@PostMapping("/users")
public void createUser(@RequestBody User user) {
// ...
}
这里的@GetMapping注解用于处理GET请求,@PostMapping注解用于处理POST请求。
三、Springboot常见注解
1.@SpringbootApplication
用于标识Spring Boot应用程序的入口类,并启用自动配置和组件扫描。示例:
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
四、Java库中常见注解
1.Lombok库
1.1 @Data
@Data
注解是 Lombok 中最常用的注解之一,它会自动为类生成一些通用的方法,包括equals()
、hashCode()
、toString()
、getter
和setter
等方法。使用@Data
注解可以简化代码,避免手动编写这些通用方法。示例:
import lombok.Data;
@Data
public class MyClass {
private String name;
private int age;
// 自动生成 getter、setter、equals、hashCode、toString 等方法
}
1.2 @Accessors(chain = true)
@Accessors(chain = true)是Lombok库中的注解,用于生成链式调用的方法。当使用@Accessors(chain = true)注解时,Lombok会为标记了该注解的类生成符合链式调用风格的setter方法,并返回this对象,从而支持链式调用。示例:
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class User {
private String username;
private int age;
}
// 在其他类中的使用
User user = new User().setUsername("Alice").setAge(25);
1.3 @Slf4j
@Slf4j用于自动生成日志相关的字段和方法。它能够在类中快速生成一个名为"log"的日志对象,以便进行日志记录。使用@Slf4j注解后,可以直接在类中使用log对象进行日志输出,而无需手动创建Logger实例。
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class MyClass {
public void myMethod() {
log.info("This is a log message.");
}
}
在上述示例中,使用@Slf4j注解后,就可以直接在myMethod()方法中使用log对象进行日志输出。
通过调用log的相应方法(如info、debug等),可以将日志信息输出到相应的日志文件或控制台。
章末
文章到这里就结束了