一. 控制器相关注解
@RestController:
表示该类是一个 RESTful Web 服务的控制器,将返回值转换成 JSON 格式并响应给客户端
@RequestMapping:
映射请求的 URL 地址和方法,用在类或方法上,可以设置 URL 地址、请求方法、请求参数等
@RequestParam:
获取请求参数的值。用在方法的参数上,可以设置参数名称、是否必须、默认值等
@PathVariable:
获取 URL 中的占位符参数,用在方法的参数上,可以设置参数名称、是否必须、默认值等
@RestController
@RequestMapping("/api")
public class UserController {@Autowiredprivate 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 {@Autowiredprivate 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 {@Autowiredprivate SessionFactory sessionFactory;@Overridepublic User findById(Long id) {Session session = sessionFactory.getCurrentSession();return session.get(User.class, id);}@Overridepublic void save(User user) {Session session = sessionFactory.getCurrentSession();session.save(user);}@Overridepublic void delete(User user) {Session session = sessionFactory.getCurrentSession();session.delete(user);}@Overridepublic 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);}
}