Springboot常用注解

前言

        在没有注解之前,程序员不仅要写视图和控制器还要花费大量的精力去写Spring MVC的XML配置文件(为了让视图和控制器产生关联关系),此外还要重要的一点,控制器当中是不能有业务逻辑的,开发者需要把业务逻辑抽离出来形成service服务和component组件,当控制器想要调用服务时,需借助IoC容器来实现,所以程序员还需要注册Bean将服务配置到IOC容器当中。故程序员在开发时除了要写必要的视图、控制层、service层等还需要做大量的配置工作,当项目越大时配置就越发复杂。

所以注解的核心目标是通过注解来替代XML配置,实现“约定大于配置”的软件设计理念,简化开发流程。

下面介绍一下spring框架中的一些常用注解:

1)下面的1~12是在controller层中使用的,用于处理 HTTP 请求和响应

1.@Controller

该注解的作用是标记一个类作为Spring MVC的控制器,处理HTTP请求。

@Controller
public class UserController {
    // 方法需配合@ResponseBody返回JSON
}


2.@RestController

该注解的作用是通过@Controller + @ResponseBody的组合注解,直接返回JSON/XML等数据。

@RestController
public class UserController {
    // 方法直接返回数据,无需@ResponseBody
}


3.@RequestMapping

该注解的作用是映射HTTP请求路径和方法(GET/POST 等)。

@RequestMapping(value = "/users", method = RequestMethod.GET)
public List<User> getUsers() { ... }


4.@RequestParam

该注解的作用是获取 URL 中的查询参数(如?name=John)。

@GetMapping("/users")
public List<User> getUsers(@RequestParam String name) { ... }


5.@PathVariable

该注解的作用是获取URL中的路径变量(如/users/{id})。

@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) { ... }


6.@GetMapping

该注解是@RequestMapping(method = RequestMethod.GET)的简写。

@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) { ... }


7.@PostMapping

该注解是@RequestMapping(method = RequestMethod.POST)的简写。

@PostMapping("/users")
public User createUser(@RequestBody User user) { ... }


8.@PutMapping

该注解是@RequestMapping(method = RequestMethod.PUT)的简写,用于更新资源。

@PutMapping("/users/{id}")
public User updateUser(@PathVariable Long id, @RequestBody User user) { ... }


9.@DeleteMapping

该注解是@RequestMapping(method = RequestMethod.DELETE)的简写。

@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable Long id) { ... }


10.@ResponseBody

该注解的作用是将方法返回值序列化为JSON/XML等格式。

@Controller
@ResponseBody // 或直接用@RestController
public class UserController { ... }


11. @RequestBody

该注解的作用是将HTTP请求体(如JSON)反序列化为Java对象。

@PostMapping("/users")
public User createUser(@RequestBody User user) { ... }


12. @CrossOrigin

该注解的主要作用是解决跨域请求问题(允许前端跨域访问 API)。

@CrossOrigin(origins = "http://localhost:3000")
@GetMapping("/users")
public List<User> getUsers() { ... }

2)下面的1~4是Spring IoC容器的核心组成部分,主要目的是简化Bean的定义和管理

1.@Configuration

这个注解用在类上,表明该类是Spring的Java配置类。在配置类里,能够定义Bean以及Bean之间的依赖关系,其作用和传统的XML配置文件是一样的。

@Configuration
public class AppConfig {
    @Bean
    public DataSource dataSource() {
        return new DriverManagerDataSource("jdbc:mysql://localhost:3306/mydb");
    }
}


2.@Bean

此注解用在方法上,用于声明一个由Spring容器管理的Bean。它一般会搭配@Configuration一起使用,方法的返回值会被注册到容器中。

@Configuration
public class AppConfig {
    @Bean
    public UserService userService() {
        return new UserServiceImpl();
    }
}


3.@Service

该注解用在类上,是一个专门的构造型注解。它的作用是标记服务层组件,让 Spring 能够自动扫描并注册这些组件。

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserRepository userRepository;
    
    // 实现方法
}


4. @Component

这个注解是一个通用注解,用于标记任意一个 Spring 组件。其他的构造型注解,像@Service、@Repository、@Controller,其实都是基于@Component扩展而来的。

@Component
public class MyComponent {
    // 组件实现
}

3)下面的1~4注解和Spring IoC容器获取依赖或者配置值相关

1.@Autowired

这是Spring提供的注解,主要用于自动装配Bean。它默认按照类型(byType)进行装配,会在容器中查找与依赖类型匹配的Bean。

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository; // 按类型注入
}

2.@Resource

此注解来自JSR-250规范,默认按照名称(byName)进行装配。如果没有指定name属性,就会根据字段名或者方法名来查找匹配的Bean。

@Service
public class UserService {
    @Resource(name = "userRepositoryImpl") // 按名称注入
    private UserRepository userRepository;
}

3.@Autowired+@Qualifier

当容器中存在多个相同类型的Bean 时,可以使用@Qualifier来指定具体要注入的Bean 名称,以此解决歧义问题。

@Service
public class UserService {
    @Autowired
    @Qualifier("primaryUserRepository") // 指定Bean名称
    private UserRepository userRepository;
}

4.@Value

该注解用于注入外部配置的值,比如.properties 文件或者.yml 文件中的属性值。

@Service
public class AppService {
    @Value("${app.name}") // 注入配置属性
    private String appName;
}

其他补充知识点

什么是Bean?

Bean是Spring框架中的核心概念之一,它是由Spring IoC(控制反转)容器管理的对象。这些对象会在应用启动时由容器创建,并按照配置(如注解、XML)来建立相应的依赖关系。

Spring通过 IoC容器负责Bean的创建、初始化、销毁,开发者无需手动调用new关键字从而便于测试和维护。

Spring管理Bean的完整生命周期如下:
实例化 → 属性注入 → 初始化方法调用 → 使用 → 销毁方法调用。

每天进步一点点,加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值