一. 控制器相关注解
@RestController:
表示该类是一个 RESTful Web 服务的控制器,将返回值转换成 JSON 格式并响应给客户端
@RequestMapping:
映射请求的 URL 地址和方法,用在类或方法上,可以设置 URL 地址、请求方法、请求参数等
@RequestParam:
获取请求参数的值。用在方法的参数上,可以设置参数名称、是否必须、默认值等
@PathVariable:
获取 URL 中的占位符参数,用在方法的参数上,可以设置参数名称、是否必须、默认值等
@RestController
@RequestMapping("/api")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/users")
public List<User> getUsers() {
return userService.getAllUsers();
}
@GetMapping("/users/{id}")
public User getUserById(@PathVariable Long id) {
return userService.getUserById(id);
}
@PostMapping("/users")
public ResponseEntity<?> createUser(@RequestBody User user) {
userService.saveUser(user);
return new ResponseEntity<>(HttpStatus.CREATED);
}
@PutMapping("/users/{id}")
public ResponseEntity<?> updateUser(@PathVariable Long id, @RequestBody User user) {
User existingUser = userService.getUserById(id);
if (existingUser != null) {
userService.updateUser(user);
return new ResponseEntity<>(HttpStatus.OK);
} else {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
}
@DeleteMapping("/users/{id}")
public ResponseEntity<?> deleteUser(@PathVariable Long id) {
User existingUser = userService.getUserById(id);
if (existingUser != null) {
userService.deleteUser(id);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
} else {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
}
}
代码中使用@RestController注解,表明这是一个RESTful Web服务。@RequestMapping注解指定了基础URL路径,用于处理HTTP请求。使用了依赖注入(@Autowired)来获取UserService,用来处理User实体的业务逻辑。在类中,定义了一些处理HTTP请求的方法:GET、POST、PUT和DELETE。
类中使用了不同的注解来指定它们的HTTP路径和HTTP方法,@GetMapping注解指定了用于处理HTTP GET请求的路径,@PostMapping指定了用于处理HTTP POST请求的路径,还使用了一些Spring MVC特定的注释,如@PathVariable和@RequestBody,用于获取请求参数或请求体的值。它们也使用了ResponseEntity类来封装HTTP响应,以及HttpStatus枚举来表示HTTP状态码。
二. 自动装配相关注解
@Autowired:
自动装配一个 Bean 对象,用在字段、方法、构造器上,可以设置是否必须、Bean 的名称等
@Value:
获取配置文件中的属性值,用在字段、方法、构造器上,可以设置属性名称、默认值等
@Component
public class AdminComponent {
@Autowired
private AdminService adminService;
@Value("${system.config}")
private String sysConfig;
public void getCongfig() {
System.out.println("system config is " + sysConfig);
}
}
三. 组件相关注解
@Component:
表示一个组件类,会被自动扫描并加载到 Spring 上下文中
@Service:
表示一个业务服务类,会被自动扫描并加载到 Spring 上下文中
@Repository:
表示一个数据访问类,会被自动扫描并加载到 Spring 上下文中
@Repository
public class UserRepositoryImpl implements UserRepository {
@Autowired
private SessionFactory sessionFactory;
@Override
public User findById(Long id) {
Session session = sessionFactory.getCurrentSession();
return session.get(User.class, id);
}
@Override
public void save(User user) {
Session session = sessionFactory.getCurrentSession();
session.save(user);
}
@Override
public void delete(User user) {
Session session = sessionFactory.getCurrentSession();
session.delete(user);
}
@Override
public List<User> findAll() {
Session session = sessionFactory.getCurrentSession();
CriteriaQuery<User> criteriaQuery = session.getCriteriaBuilder().createQuery(User.class);
criteriaQuery.from(User.class);
return session.createQuery(criteriaQuery).getResultList();
}
}
四. 配置相关注解
@Configuration:
表示一个配置类,会被自动扫描并加载到 Spring 上下文中,可以使用 @Bean 注解来定义一个 Bean 对象
@EnableAutoConfiguration:
用来开启自动配置,会自动配置 Spring 上下文中的各种 Bean 对象
@EnableAutoConfiguration
public class MyApplication {
//...
}
@Conditional:
用来条件化地加载 Bean 对象,可以根据某些条件来决定是否加载
@Configuration
public class SysConfig {
@Bean
@Conditional(SysCondition.class)
public SysBean sysBean() {
return new SysBean();
}
}
public class SysCondition implements Condition {
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return true; //返回 true 表示需要加载 SysBean 对象
}
}
五. 组合注解
@SpringBootApplication:包括了 @Configuration、@EnableAutoConfiguration 和 @ComponentScan。
@Configuration:表示该类是一个配置类,可以使用 @Bean 注解来定义一个 Bean 对象
@EnableAutoConfiguration:用来开启自动配置,会自动配置 Spring 上下文中的各种 Bean 对象
@ComponentScan:用来自动扫描并加载符合条件的组件类,如果不设置扫描路径,默认扫描该注解所在类的包及其子包
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}