前言
- 目前企业开发多采用纯注解的方式开发,注解开发的好处:简洁,可读性强
- 最近学习了spring全家桶,总结了有关spring的常用注解,写的不对的地方,欢迎指正
Spring模块注解
| @Configuration:等同于<beans></beans> |
| @Bean:等同于<bean></bean> |
| @Value:获取值,等同于property |
| @PropertySource: 用于引入外部属性配置 |
| 构造型注解:@Component @Controller @Service @Repository |
| @Component:标注一个普通的Bean类 |
| @Repository:标注一个DAO组件类 |
| @Service:标注一个业务逻辑组件类 |
| @Controller:标注一个控制器组件类 |
| @ComponentScan 包扫描(读取扫描包中使用构造型注解的类) |
| @Autowired:可用于为类的属性、构造器、方法进行注值 |
| @Resource:不属于spring的注解,使用该annotation为目标bean指定协作者Bean |
| @Autowired + @Qualifier = @Resource |
| @PostConstruct 和 @PreDestroy 实现初始化和销毁bean之前进行的操作 |
AOP模块注解
| @Aspect:声明表示这是一个切面类 |
| @Pointcut:指定一个切点,定义需要拦截的东西 |
| @Pointcut("execution(* co.chniny.controller..*.*(..))") |
| 第一个 * 号表示返回值类型,* 表示所有类型 |
| 包名:表示需要拦截的包名,后面的两个点表示当前包和当前包的所有子包 |
| 第二个 * 号表示类名,* 表示所有类 |
| *(..) 这个星号表示方法名,* 表示所有的方法,后面括弧里面表示方法的参数,两个句点表示任何参数 |
| |
| @Pointcut("@annotation(org.springframework.web.bind.annotation.PostMapping)") |
| |
| @Around:用于修饰Around增强处理,@Around可以自由选择增强动作与目标方法的执行顺序,也就是说可以在增强动作前后,甚至过程中执行目标方法;@Around可以改变执行目标方法的参数值,也可以改变执行目标方法之后的返回值 |
| @Before:在切面切入目标方法之前执行 |
| @After:指定的方法在切面切入目标方法之后执行,也可以做一些完成某方法之后的 Log 处理 |
| @AfterReturning:可以用来捕获切入方法执行完之后的返回值,对返回值进行业务逻辑上的增强处理 |
| @AfterThrowing:当被切方法执行过程中抛出异常时,会进入 @AfterThrowing 注解的方法中执行,在该方法中可以做一些异常的处理逻辑 |
| @EnableAspectJAutoProxy:开启AOP |
| @EnableCaching:开启spring缓存 |
SpringMVC模块注解
| @Controller:标识这是一个控制器 |
| @RequestMapping:路径映射;可用于类和方法,作用于类:表示给当前类同一的路径,作用于方法:映射到具体的路径 |
| name:mapping名 |
| value:path路径 |
| path:等同于value |
| method:请求的方法类型 |
| params:只有含有指定参数的请求才会处理 |
| headers:请求头 |
| consumes:处理的参数类型 |
| produces:指定请求类型和返回值类型 |
| |
| @RequestMapping("xxx/{name}")为当前格式时,获取name的值需要配合@PathVariable |
| @GetMapping:用于处理请求方法的GET类型 |
| @PostMapping:用于处理请求方法的POST类型等 |
| @PutMapping:用于处理请求时更新操作 |
| @DeleteMapping:用于处理请求是删除操作 |
| @PatchMapping:是对put方式的一种补充;put方式可以更新,但更新的是整体,patch是对局部更新 |
| @ModelAttribute:表示该Controller的所有方法在调用前,先执行此@ModelAttribute标注的方法 |
| @SessionAttributes:应用到Controller上面,可以将Model中的属性同步到session当中 |
| @RequestParam:接受get请求的参数,类似request.getParameter("name") |
| @RequestBody:指方法参数被绑定到HTTP请求Body |
| @ResponseBody:返回渲染为json |
| @CrossOrigin:解决跨域请求问题,标注在方法和类 |
| @EnableTransactionManagement:开启事务管理,在spring配置文件中配置 |
| @Transactional:springmvc事务注解,若标注在业务层,表示业务层事务管理,如果出现异常,则回滚,确保数据的正确 |
| @EnableWebMvc:开启SpringMVC注解,在springmvc配置文件中配置 |
Mybatis模块注解
| SQL语句映射: |
| @Insert:实现新增功能 |
| @Select:实现查询功能 |
| @SelectKey:插入数据后,获取自增id的值 |
| @Update:实现更新功能 |
| @Delete:实现删除功能 |
| 结果集映射: |
| @Results:各个属性的含义,id为当前结果集声明唯一标识,value值为结果集映射关系 |
| @Result:代表一个字段的映射关系,column指定数据库字段的名称,property指定实体类属性的名称,jdbcType数据库字段类型 |
| @ResultMap来引用映射结果集,其中value可省略 |
| 关系映射: |
| @one:用于一对一关系映射 |
| @many:用于一对多关系映射 |
| |
| @MapperScan(basePackages = {"co.chniny.mapper"}) |
| @SelectProvider(type = BaseProvider.class, method = "getAll") |
| @Mapper |
| |
Spring Boot模块注解
| @EnableAutoConfiguration:启用SpringBoot的自动配置机制 |
| @SpringBootApplication:申明让spring boot自动给程序进行必要的配置,@SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan |
| @RestController:用于标注控制层组件,等同于 @ResponseBody + @Controller |
| @Repository:标注一个DAO组件类 |
| @Import: 用来导入其他配置类 |
| @ImportResource: 用来加载xml配置文件 |
| @Scope:注解在类上,描述spring容器如何创建Bean实例 |
| singleton: 表示在spring容器中的单例,通过spring容器获得该bean时总是返回唯一的实例 |
| prototype:表示每次获得bean都会生成一个新的对象 |
| |
| |
| @Data : 注解在类上, 为类提供读写属性, 此外还提供了 equals()、hashCode()、toString() 方法 |
| @Getter/@Setter : 注解在类上, 为类提供读写属性 |
| @ToString : 注解在类上, 为类提供 toString() 方法 |
| @Slf4j : 注解在类上, 为类提供一个属性名为 log 的 log4j 的日志对象 |
| @Log4j : 注解在类上, 为类提供一个属性名为 log 的 log4j 的日志对象 |
| |
补充
| 标准注解: |
| @SuppressWarnings |
| @Override |
| @Deprecated |
| |
| 自定义注解: |
| 语法:访问修饰符 @interface 注解名 |
| |
| 元注解:通常标注在自定义注解上 |
| @Target: 表示该注解可用于什么地方;参数包括: |
| CONSTRUCTOR:构造器的声明 |
| FIELD:域声明(包括enum实例) |
| LOCAL_VARIBALE:局部变量声明 |
| METHOD:方法声明 |
| PACKAGE:包声明 |
| PARAMETER:参数声明 |
| TYPE:类、接口(包含注解类型)、enum声明 |
| |
| @Retention:表示需要在什么级别保存该注解信息;参数包含: |
| SOURCE:注解将被编译器丢弃 |
| CLASS:注解在class文件中可用 |
| RUNTIME:JVM将在运行期也保留注解,因此可以通过反射机制读取注解信息 |
| @Documented: 将此注解包含在Javadoc中 |
| @Inherited:运行子类继承父类中的注解 |
| @Native: 表示定义常量值的字段可以从本地代码引用 |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术