(1)@SpringBootApplication
作用:这是一个组合注解,包括了@Configuration、@EnableAutoConfiguration和@ComponentScan三个注解。用于标识SpringBoot应用程序的入口类。
-
@EnableAutoConfiguration:启用 SpringBoot 的自动配置机制
-
@ComponentScan: 扫描被
@Component
(@Service
,@Controller
)注解的 bean,注解默认会扫描该类所在的包下所有的类。 -
Configuration:允许在 Spring 上下文中注册额外的 bean 或导入其他配置类
@SpringBootApplication
public class SpringSecurityJwtGuideApplication {
public static void main(java.lang.String[] args) {
SpringApplication.run(SpringSecurityJwtGuideApplication.class, args);
}
}
(2)@RequestMapping
作用:用于映射请求URL和处理方法。@RequestMapping是Spring MVC框架中的一个核心注解,它用于映射HTTP请求和控制器方法之间的关系。它可以用于类级别和方法级别,用于指定请求URL和HTTP方法(GET、POST、PUT、DELETE等)。
@RestController
@RequestMapping("/api")
public class UserController {
@GetMapping("/users")
public List<User> getUsers() {
// 获取用户列表
}
@PostMapping("/users")
public void createUser(@RequestBody User user) {
// 创建新用户
}
@GetMapping("/users/{id}")
public User getUserById(@PathVariable Long id) {
// 根据ID获取用户信息
}
@PutMapping("/users/{id}")
public void updateUser(@PathVariable Long id, @RequestBody User user) {
// 更新用户信息
}
@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable Long id) {
// 根据ID删除用户
}
}
(3)@RestController
作用:与@Controller类似,但是@RestController会自动将返回值转换为JSON格式。
@RestController是Spring Framework 4.0版本引入的一个注解,它是@Controller和@ResponseBody的组合注解。它用于标注一个类,表示这个类是一个RESTful风格的控制器,可以处理HTTP请求并返回JSON/XML格式的响应。
@RestController注解用于替代原来的@Controller注解,它默认情况下会将控制器方法的返回值转换为JSON格式,并以HTTP响应的方式返回给客户端。如果需要返回XML格式的响应,可以使用其他注解,如@Produces和@Consumes。
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
}
(4)GetMapping
作用:用于映射HTTP GET请求。
@GetMapping("users")
等价于@RequestMapping(value="/users",method=RequestMethod.GET)
@GetMapping("/users")
public ResponseEntity<List<User>> getAllUsers() {
return userRepository.findAll();
}
(5)PostMapping
作用:用于映射HTTP POST请求。
@PostMapping("users")
等价于@RequestMapping(value="/users",method=RequestMethod.POST)
@PostMapping("/users")
public ResponseEntity<User> createUser(@Valid @RequestBody UserCreateRequest userCreateRequest) {
return userRespository.save(user);
}
(6)PutMappering
作用:用于映射HTTP PUT请求。
@PutMapping("/users/{userId}")
等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.PUT)
@PostMapping("/users")
public ResponseEntity<User> createUser(@Valid @RequestBody UserCreateRequest userCreateRequest) {
return userRespository.save(user);
}
(7)@DeleteMapping
作用:用于映射HTTP DELETE请求。
@DeleteMapping("/users/{userId}")
等价于@RequestMapping(value="/users/{userId}",method=RequestMethod.DELETE)
@DeleteMapping("/users/{userId}")
public ResponseEntity deleteUser(@PathVariable(value = "userId") Long userId){
......
}
(8)@RequestParam
作用:用于获取请求参数的值。
@GetMapping("/klasses/{klassId}/teachers")
public List<Teacher> getKlassRelatedTeachers(
@PathVariable("klassId") Long klassId,
@RequestParam(value = "type", required = false) String type ) {
...
}
(9)@PathVariable
作用:用于获取URL中的参数值。@PathVariable是Spring MVC框架中的一个注解,用于将HTTP请求路径中的变量绑定到控制器方法的参数上。
@GetMapping("/klasses/{klassId}/teachers")
public List<Teacher> getKlassRelatedTeachers(
@PathVariable("klassId") Long klassId,
@RequestParam(value = "type", required = false) String type ) {
...
}
(10)@RequestBody
作用:用于将HTTP请求的主体转换为方法的参数。@RequestBody是Spring MVC框架中的一个注解,用于将HTTP请求体中的数据绑定到控制器方法的参数上。
@RestController
@RequestMapping("/api")
public class UserController {
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// 创建用户
}
}
(11)@ResponseBody
作用:用于将方法的返回值转换为HTTP响应的主体。@ResponseBody是Spring MVC框架中的一个注解,用于将控制器方法的返回值转换为HTTP响应体中的数据。
@RestController
public class UserController {
@GetMapping("/users/{id}")
@ResponseBody
public User getUser(@PathVariable int id) {
// 从数据库或其他地方获取用户数据
User user = userService.getUserById(id);
return user;
}
}
(12)@Autowired
作用:用于自动装配Spring容器中的Bean。
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
// 实现UserService接口中的方法
}
(13)@Component
作用:用于标识一个类是Spring容器中的组件。@Component是Spring框架中的一个通用注解,用于标注一个类作为Spring Bean。
@Component
public class UserServiceImpl implements UserService {
}
(14)@Service
@Service
public class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public User addUser(User user) {
return userRepository.save(user);
}
public void deleteUser(Long userId) {
userRepository.deleteById(userId);
}
public User getUser(Long userId) {
return userRepository.findById(userId).orElse(null);
}
}
(15)@Repository
作用:@Repository是属于Spring的注解。它用来标注访问层的类(Dao层),它表示一个仓库,主要用于封装对于数据库的访问。其实现方式与@Component注解相同,只是为了明确类的作用而设立。
即@Repository是@Component注解的一个派生品,与@Service和@Controller都可以理解为@Component注解的扩展。他们的作用都是在类上实例化bean,并把当前类对象的实现类交给spring容器进行管理。
(16)@Configuration
作用:@Configuration 用于定义配置类,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
@Configuration
public class TestConfiguration {
public TestConfiguration() {
System.out.println("TestConfiguration容器初始化...");
}
}
(17)@Bean
作用:用于将一个方法返回的对象注册到Spring容器中。@Bean是Spring框架中的一个注解,用于将一个方法返回的对象注册为一个Spring Bean。
@Configuration
public class TestConfiguration {
public TestConfiguration() {
System.out.println("TestConfiguration容器初始化...");
}
}
(18)@Target
作用:该注解可以声明在哪些目标元素之前,也可理解为注释类型的程序元素的种类。
ElementType.PACKAGE:该注解只能声明在一个包名前。
ElementType.ANNOTATION_TYPE:该注解只能声明在一个注解类型前。
ElementType.TYPE:该注解只能声明在一个类前。
ElementType.CONSTRUCTOR:该注解只能声明在一个类的构造方法前。
ElementType.LOCAL_VARIABLE:该注解只能声明在一个局部变量前。
ElementType.METHOD:该注解只能声明在一个类的方法前。
ElementType.PARAMETER:该注解只能声明在一个方法参数前。
ElementType.FIELD:该注解只能声明在一个类的字段前。
@Target(ElementType.METHOD)
(19)@Retention
作用:
告诉编译程序如何处理,也可理解为注解类的生命周期。
RetentionPolicy.SOURCE : 注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
RetentionPolicy.CLASS : 注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
RetentionPolicy.RUNTIME : 注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;
这3个生命周期分别对应于:Java源文件(.java文件) ---> .class文件 ---> 内存中的字节码。
那怎么来选择合适的注解生命周期呢?
首先要明确生命周期长度 SOURCE < CLASS < RUNTIME
@Retention(RetentionPolicy.RUNTIME)
(20)@Aspect
作用:用于定义切面。
@Aspect是Spring框架中的一个注解,用于标识一个类为切面类,从而可以在该类中定义切面逻辑以实现AOP(面向切面编程)。
在Spring框架中,如果需要使用AOP来实现某些功能,我们可以使用@Aspect注解来标识一个类为切面类。在切面类中,我们可以定义切面逻辑,包括切入点、通知类型和切面顺序等,从而实现AOP编程的功能。
@Aspect
@Component
public class AnnotationAspect {
// 定义一个切点:所有被RequestMapping注解修饰的方法会织入advice
@Pointcut("@annotation(TestAnnotation)")
private void advicePointcut() {}
}