spring springboot springmvc mybtis中常用的注解
打开任何一个Spring Boot项目的常用源码,你最先撞见的常用就是满屏的注解。它们像标签一样贴在类、常用方法、常用字段上,常用省去了XML时代成百上千行的常用配置。但注解多了也容易混——Spring、常用Spring MVC、常用Spring Boot、常用MyBatis各自的常用注解长得像亲戚,用错地方编译器不一定报错,常用运行时才给你颜色看。常用
先理清Spring框架自身的常用核心注解。@Component、常用@Service、常用@Repository、@Controller这四个本质上是同一个东西,Spring扫描到它们都会注册成Bean,区别只是语义分层。@Service标在业务层,@Repository标在DAO层,@Controller标在Web层——我见过有人在Service类上写@Repository,能跑,但代码review时被同事嘲了一下午。依赖注入靠@Autowired,默认按类型装配,如果有多个同类型Bean就得配合@Qualifier指定名字。构造器注入时Spring 4.3以后可以省略@Autowired,这个细节很多人不知道。配置类用@Configuration加@Bean,相当于把XML里的<bean>标签搬到了Java代码里。
Spring MVC的注解管的是HTTP请求怎么映射到方法上。@RequestMapping是万金油,可以标在类上也可以标在方法上,但实际项目里更常用它的细化版本:@GetMapping、@PostMapping、@PutMapping、@DeleteMapping。取参数用@RequestParam拿查询字符串,@PathVariable拿URL路径里的变量,@RequestBody把JSON反序列化成对象。返回JSON给前端,类上标@RestController就够了,它等于@Controller加@ResponseBody。有个坑我踩过:@RequestParam默认required=true,前端少传一个参数直接400,排查半天才发现是注解默认值的问题。
Spring Boot的注解核心就一个@SpringBootApplication,它组合了@Configuration、@EnableAutoConfiguration和@ComponentScan。自动配置是Spring Boot的灵魂,@EnableAutoConfiguration会去读META-INF/spring.factories(Spring Boot 2.7以后改成了AutoConfiguration.imports),按条件决定加载哪些配置类。条件注解里@ConditionalOnClass和@ConditionalOnMissingBean用得最多——前者判断classpath里有没有某个类,后者判断容器里有没有某个Bean。读配置用@Value拿单个属性,@ConfigurationProperties批量绑定一组配置到Java Bean上,后者类型安全得多,推荐优先用。
MyBatis的注解分两块。映射接口用@Mapper,或者在启动类上加@MapperScan批量扫描包路径。写SQL可以直接用@Select、@Insert、@Update、@Delete标在方法上,简单查询这么写很清爽。但动态SQL用注解就痛苦了,得套<script>标签拼XML字符串,可读性极差。复杂查询还是老老实实写XML映射文件,用@Results做字段和属性的映射关系,或者开mapUnderscoreToCamelCase让下划线自动转驼峰。传多个参数时记得加@Param,不然MyBatis不知道SQL里的#{ }对应哪个参数,这个报错信息还算友好,一般能看懂。
实际项目里这四层注解经常混着用。一个典型的Controller方法上可能同时挂着@GetMapping、@ResponseBody(如果类上没标@RestController),调用的Service实现类上标着@Service,注入的Mapper接口上标着@Mapper,方法上写着@Select。注解本身不复杂,复杂的是搞清楚每个注解由哪个框架处理、在什么阶段生效。分清楚这一点,看源码和排查问题会顺很多。
本文地址:http://www.79wt.cn/news/1432a1099846.html
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。