【JAVA】小白入门spring 注解
Spring 的注解可以理解为:给类、方法、属性贴“标签”,告诉 Spring 框架这个东西应该怎么被管理、怎么被调用、怎么注入。
比如:
@Component
public class UserService {
}
意思是:UserService 这个类交给 Spring 管理,以后需要它的时候,Spring 可以自动创建对象。
一、最核心的几个注解
1. @Component
表示这是一个 Spring 组件,会被 Spring 自动扫描并创建对象。
@Component
public class UserService {
public void hello() {
System.out.println("Hello Spring");
}
}
等价于告诉 Spring:
这个类你帮我管理起来。
2. @Autowired
表示自动注入对象。
@Component
public class UserController {
@Autowired
private UserService userService;
public void test() {
userService.hello();
}
}
意思是:
我需要一个
UserService对象,你帮我从 Spring 容器里找一个注入进来。
3. @Controller
用于 Web 层,表示这是一个控制器,负责接收浏览器请求。
@Controller
public class UserController {
}
常用于传统 Spring MVC 页面跳转。
4. @RestController
表示这是一个 REST 风格接口控制器,返回数据,而不是页面。
@RestController
public class UserController {
@GetMapping("/hello")
public String hello() {
return "Hello Spring";
}
}
浏览器访问:
http://localhost:8080/hello
会返回:
Hello Spring
@RestController 可以理解为:
@Controller + @ResponseBody
5. @Service
@Service 是 Spring 里用来标记业务逻辑层的注解。
简单说:
@Service
public class UserService {
}
意思是告诉 Spring:
这个类是一个业务类,请你帮我创建对象,并放进 Spring 容器中管理。
6. @Repository
@Repository 是 Spring 里用来标记数据访问层的注解。
简单说:
@Repository
public class UserRepository {
}
意思是告诉 Spring:
这个类是用来访问数据库的,请你帮我管理它。
二、常见分层注解
Spring 项目通常分为三层:
| 注解 | 用在哪一层 | 作用 |
|---|---|---|
@Controller |
控制层 | 接收请求 |
@RestController |
控制层 | 接收请求并返回数据 |
@Service |
业务层 | 写业务逻辑 |
@Repository |
数据访问层 | 操作数据库 |
@Component |
通用组件 | 普通 Spring 组件 |
例如:
@RestController
public class UserController {
@Autowired
private UserService userService;
}
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
}
@Repository
public class UserRepository {
}
它们本质上都类似于 @Component,都是把类交给 Spring 管理,只是语义更清楚。
三、请求相关注解
1. @RequestMapping
用于定义接口路径。
@RequestMapping("/user")
public class UserController {
}
表示这个类下面的接口都以 /user 开头。
2. @GetMapping
处理 GET 请求,通常用于查询数据。
@GetMapping("/user")
public String getUser() {
return "查询用户";
}
访问:
GET /user
3. @PostMapping
处理 POST 请求,通常用于新增数据。
@PostMapping("/user")
public String addUser() {
return "新增用户";
}
4. @PutMapping
处理 PUT 请求,通常用于修改数据。
@PutMapping("/user")
public String updateUser() {
return "修改用户";
}
5. @DeleteMapping
处理 DELETE 请求,通常用于删除数据。
@DeleteMapping("/user")
public String deleteUser() {
return "删除用户";
}
四、获取请求参数的注解
1. @RequestParam
获取 URL 后面的参数。
@GetMapping("/hello")
public String hello(@RequestParam String name) {
return "Hello " + name;
}
访问:
/hello?name=Tom
返回:
Hello Tom
2. @PathVariable
获取路径中的参数。
@GetMapping("/user/{id}")
public String getUser(@PathVariable Integer id) {
return "用户ID:" + id;
}
访问:
/user/100
返回:
用户ID:100
3. @RequestBody
接收 JSON 数据。
前端发送:
{
"name": "Tom",
"age": 18
}
后端接收:
@PostMapping("/user")
public String addUser(@RequestBody User user) {
return user.getName();
}
实体类:
public class User {
private String name;
private Integer age;
// getter 和 setter
}
五、配置相关注解
1. @SpringBootApplication
Spring Boot 项目的启动类注解。
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
它是 Spring Boot 项目的入口。
可以简单理解为:
从这里启动整个 Spring Boot 程序。
2. @Configuration
表示这是一个配置类。
@Configuration
public class AppConfig {
}
3. @Bean
手动创建一个对象,并交给 Spring 管理。
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserService();
}
}
适用于你不能直接给类加 @Component 的情况,例如第三方库里的类。
六、事务注解
@Transactional
用于数据库事务。
@Transactional
public void transfer() {
// 扣钱
// 加钱
}
意思是:
这个方法要么全部执行成功,要么全部回滚。
比如转账:
@Transactional
public void transfer() {
accountA.minus(100);
accountB.add(100);
}
如果中间出错,扣钱操作也会回滚,避免钱扣了但没到账。
七、最常用注解总结
初学者先重点掌握这些:
| 注解 | 作用 |
|---|---|
@SpringBootApplication |
Spring Boot 启动入口 |
@RestController |
写接口 |
@RequestMapping |
定义公共路径 |
@GetMapping |
查询接口 |
@PostMapping |
新增接口 |
@RequestParam |
获取 URL 参数 |
@PathVariable |
获取路径参数 |
@RequestBody |
获取 JSON 请求体 |
@Service |
业务层 |
@Repository |
数据访问层 |
@Autowired |
自动注入对象 |
@Component |
普通组件 |
@Bean |
手动注册对象 |
@Transactional |
开启事务 |
八、一个完整小例子
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public String getUser(@PathVariable Integer id) {
return userService.getUserById(id);
}
@PostMapping
public String addUser(@RequestBody User user) {
return "添加用户:" + user.getName();
}
}
@Service
public class UserService {
public String getUserById(Integer id) {
return "用户ID:" + id;
}
}
public class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
}
这个例子里:
@RestController
说明 UserController 是接口控制器。
@RequestMapping("/user")
说明接口路径以 /user 开头。
@Autowired
说明自动注入 UserService。
@GetMapping("/{id}")
说明处理 /user/1 这种 GET 请求。
@PathVariable Integer id
说明从路径中取出 id。
@PostMapping
说明处理新增用户请求。
@RequestBody User user
说明从 JSON 请求体中接收用户信息。
总结:
Spring 注解的核心作用,就是让 Spring 自动帮你创建对象、管理对象、注入对象、处理请求。
更多推荐

所有评论(0)