admin管理员组

文章数量:1794759

SpringBoot 常用注解含义

SpringBoot 常用注解含义

项目中常用注解:

@SpringBootApplication

此注解描述的类为springboot项目的启动入口类 记住: 1、springboot项目的启动入口类只能有一个 2、springboot项目的启动入口类需要使用SpringBootApplication注解进行描述

这个类在启动时会做那些事情呢?

1、加载类(将类的信从磁盘读到内存):线程+IO 2、创建字节码对象(其类型为Class类型)用于存储类的字节码信 3、基于字节码对象获取类上的注解信,判定此类是否要交给spring管理 4、假如是交给spring管理的对象,spring框架会创建其对象然后赋予其特性 5、基于配置文件(例如application.properties)以及springboot提供的自动配置对对象进行初始化应用

如何验证启动类在启动时加载了那些类呢?(借助jvm参数进行分析)

类加载过程分析参数:-XX:+TraceClassLoading

在springboot中我们自己的java业务代码写到那里?如何交给spring管理

1、所有业务代码写到启动类所在的包或者子包中 2、将这些类使用特定注解进行描述(例如@Commpent,@Service,@Controlle…)

在springboot中我们自己的java业务测试代码写到那里,有什么特点

所有测试代码写到src/test/java目录中启动类所在的包或子包中 所有测试类使用@SpringBootTest注解进行描述 所有测试方法使用org.junit.jupiter.api.Test

@SpringBootTest

此注解为测试类注解,在springboot项目中的测试类上必须加上次注解 然后在方法上加@Test此test注解导入的包为org.junit.jupiter.api.Test;时springboot 特有的测试包

@Component

此注解描述的时本类交给spring容器bean管理,假如没有起名,默认类名,然后首字母小写

假如下对象为一个池对象,Spring 管理bean对象,会为bean赋予什么特性?这些特性有什么好处?

1、延迟加载(按需加载,懒加载)特性-暂缓对象的创建 优点: 何时需要何时创建 优化资源使用 缺点:用时在创建可能会导致响应速度降低 场景:资源有限,大对象,稀少用,能不创建则不创建 2、作用域(spring框架为对象提供的作用范围,对象的生命周期只能在指定范围有效) 优点:让对象在有效范围发挥作用,尽量控制对象的创建和销毁以实现对象的高效,低耗的运行 缺点:框架底层设计难度会加大,应用不熟练会导致作用域冲突。 场景:不同业务作用域的设计也会不同(例如 对象在整个项目中应用非常频繁可以考虑单利) 实现:在需要设定作用域的类上使用@Scope注解进行描述 @Scope(“singleton”) 单例作用域,此作用域的对象在这个内存只有一份,通过共享设计(bean池),实现对象的可重用性。此对象何时创建由懒加载(Lazy)特性设计决定,是否可以被销毁由spring框架决定(一般是在容器销毁时销毁)。适合频度应用比较高的对象。 @Scope(“prototype”) 多例作用域,此作用域的对象在需要时创建(与懒加载特性无关), 每次从容器获取都是一个新的对象,且这些对象spring框架不负责销毁。适合应用频度比较低的对象 3、生命周期方法(每个对象都有生命周期,但不见得每个对象都会设置生命周期方法) 如何理解生命周期方法?生命周期方法是在对象生命周期过程中要执行的一些方法 设计生命周期方法的目的?对象生命周期的不同阶段执行不同业务(例如servlet 中init,service,destory) Spring如何设计Bean对象生命周期方法?spring框架中使用相关注解对象对生命周期方法进行描述

@Lazy

此注解表示懒加载

@PostConstruct

此注解描述生命周期初始化方法,在构造方法执行之后执行,用于实现一些资源的初始化

@PreDestroy

此注解描述生命周期销毁方法,在对象销毁之前执行

@Autowired

此注解表示依赖注入

@EnableAsync

此注解表示启动spring框架中的异步操作(底层会创建一个线程池)

@EnableCaching

此注解表示启动缓存配置在需要缓存的方法上加@Cacheable

@Cacheable

此注解表示启用缓存

@Controller

表示控制层交给springboot管理

@Service

表示业务层交给springboot管理

@Mapper

表示数据称交给springboot管理

@Delete@Select@Update@Insert

表示数据库的增删改查操作在注解内加sql语句即可例如@Select(“select * from A where id=#{id}”)

@RequestMapping(“aaa”)

此注解表示请求地址,前端请求路径,此访问路径会传递到DispatcherServlet对象 DispatcherServlet对象基于用户输入的url找到对应的controller及方法 DispatcherServlet底层会通过反射技术调用对应的控制层方法 此注解描述的方法返回值是一个页面或者一个封装类VO

@ResponseBody

此注解在表示返回值类型为字符串类型,在类上加此注解运行时所有方法上都会自动加上该注解

@Slf4j

生成日志对象spring自带的注解

@Data

此注解会自动生成Get Set toString方法,该方法需要安装Lombok以及配置依赖

<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> @NoArgsConstructor

生成无参构造此注解配合@Date使用

@AllArgsConstructor

生成有参构造注解配合@Date使用

@DateTimeFormat

次注解用于描述或set方法,告诉spring mvc按照指定日期格式进行解析例如: @DateTimeFormat(pattern =“yyyy-MM-dd HH:mm:ss”) @DateTimeFormat默认是(pattern =“yyyy/MM/dd HH:mm:ss”)格式

@Configuration

注解描述的类为一个配置对象, 此对象也会交给spring管理

@Bean

通常会配置@Configuration注解进行使用,其它特点: 1)此注解描述方法会交给spring管理 2)@Bean注解没有指定其value属性的值,则bean的名字默认为方法名

@RestController

注解等效于@Controller + @ResponseBody

@Aspect

注解描述的类型为Springle AOP中的切面对象类型。此对象中可以封装: 1、切入点(定义在那些目标对象的那些方法上进行功能扩展) 2、通知(封装功能扩展的业务逻辑)

@Pointcut(“bean(sysUserServiceImpl)”)

注解用于定义切入点,具体方式可以基于特定表达式进行实现。例如 1、bean为一种切入点表达式类型 2、sysUserServiceImpl 为spring容易中的一个bean的名字 这里的涵义是当sysUserServiceImpl对象中的任意方法执行时,都由本切面对象的通知方法做功能增强

@Around

由@Around注解描述的方法为一个环绕通知方法,我们可以再次方法内部 手动调用目标方法(通过连接点对象ProceedingJoinPoint的proceed)方法进行调用 环绕通知:此环绕通知使用的切入点为bean(sysUserServiceImpl) 环绕特点: 1、编写: a)方法的返回值为Object b)方法参数为ProceedingJoinPoint类型 c)方法抛出异常为throwable 2、应用: a)目标方法执行之前或之后都可以进行功能拓展 b)相当于其它通知优先级最高 @param jp为一个连接对象(封装了正在要执行的目标方法信) @return 目标方法的执行结果

@annotation

为注解的切入点表达式,在这里表示有RequiredCache注解描述的方法为切入点用法如下: @Pointcut("@annotation(com.cy.pjmon.annotation.RequiredCache)")

@RequiresPermissions @RequiresPermissions这个注解的方法为一个切入点方法,此方法在执行之前 需要进行全线检测,假如用户权限中包含@RequiresPermissions注解value属性指定 的值,则授权访问,不包含则抛出异常. 思考:假如你去设计这个切入点对应的通知方法,你会做什么? 1、目标方法执行之前获取方法上的@RequiresPermissions注解,进而取到注解中内容 2、将注解中内容提交给SecurityManager对象(此对象赋值授权操作) 3、SecurityManager会基于realm去查找用户拥有的权限(这个部分我们自己实现) 4、SecurityManager会判断用户拥有权限中是否包含RequiresPermissions注解中的内容 5、SecurityManager会基于用户权限进行授权或抛异常.

用法: @RequiresPermissions(value=“sys:user:valid”)value可以省略

@Transactional

当一个类使用了 @Transactional 注解以后表示类中所有方法都要进行事物控制,类上 使用@Transactional注解用于定义方法上的事物共性,假如还有事物特性,可以在对应 的方法上继续使用@Transactional注解定义事物特性 ● timeout:事务的超时时间,默认值为-1,表示没有超时显示。如果配置了具体时间,则超过该时间限制但事务还没有完成,则自动回滚事务。 ● read-only:指定事务是否为只读事务,默认值为 false;为了忽略那些不需要事务的方法,比如读取数据,可以设置 read-only 为 true。 ● rollback-for:用于指定能够触发事务回滚的异常类型,如果有多个异常类型需要指定,各类型之间可以通过逗号分隔。 ● no-rollback- for 抛出 no-rollback-for 指定的异常类型,不回滚事务。 ● isolation事务的隔离级别,默认值采用 DEFAULT。

微信公众号:程xu猿

本文标签: 注解含义常用SpringBoot