SpringBoot注解
动吧
new 对象是一个耗时的过程,
spring 是一个资源整合框架。
@SpringBootApplication
由此注解(@SpringBootApplication)描述的类为springBoot项目的启动入口类
- 1)springBoot项目的启动入口只有一个
- 2)springBoot项目的启动入口需要使用(@SpringBootApplication)注解描述
@Component 交给Spring管理 是Spring中用于描述Bean类的一个注解。用于告诉Spring这个类的实例由Spring创建,当此对象由Spring创建和管理时,默认会将对象存储到池(Bean池)中。
@Lazy 懒加载 注解用于描述类,其目的是告诉spring框架此类支持延迟加载,通常会配合单例作用域使用。
@Scope(value = “singleton”) = @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) 默认(单例)作用域,对象频率高,存池Pool里
@Scope(“prototype”) 多例作用域,频率低
@Autowired 注解描述属性 ,用于告诉spring框架,此属性注入一个值
@Autowired has a 关系 Dao–Controller
@SpringBootTest 注解用于告诉spring框架,此测试类交给spring管理
@PostConstruct 注解用于描述bean对象生命周期方法中的初始化方法,此方法会在对象的构造方法之后执行(是对象创建以后的初始化)。
@PreDestroy 注解用于描述Bean对象生命周期方法中的销毁方法,此方法会在对象销毁之前执行(当作用域为prototype时,此方法不会执行)。
Dependent lookup
@Component
Component默认是单例的
@Scope(“prototype”)设为多例
带此注解的类看为组件,当使用基于注解的配置和类路径扫描的时候,这些类就会被实例化
这个值可能作为逻辑组件(即类)的名称,在自动扫描的时候转化为spring bean,即相当中的id
@Service
@Controller
@RequestMapping("/goods/")
自定义注解 @Retention @Target
- @Retention 用于描述注解何时有效,例如RUNTIME就表示运行时有效
- @Target 用于描述注解可以描述哪些对象?例如Type表示注解可以描述类和接口
@ResponseBody
//作用1。将对象转换为JSON 2.如果返回值是String类型,则返回字符串本身 3.一般客户端发起ajax请求时,采用该注解返回数据,将不会执行试图解析操作
//方法返回值为对象(不包字符串,直接量如Long id),spring mvc 可以将其转换为JSON格式的字符串
//spring mvc 框架底层默认会使用jackson API将对象转化为json格式的字符串
返回客户端数据 为JSON格式的字符串
JSON 属于一种数据结构 {“key1”:“value1”,“key2”:“value2”,…}
@RestController == @Controller + @ResponseBody
Repository
@Mapper
注解由mybatis框架定义,用于描述数据层接口对象,系统底层启动mybatis框架注解的描述,创建其接口实现类,并将实现类对象交给spring管理
@MapperScan(“con.tedu.mapper”)
扫描该包下的所有mapper类作为Mapper映射文件
mapper包多时使用
@Param 于SpringBoot项目,及执行动态SQL语句
int deleteByIds(@Param(“ids”) Integer…ids );
用来传多个参数
给mybaties的数据起别名(传参时的别名字段)
@Table
对应数据库的表,如果不写默认是类名首字母小写作为表名,比Member,不写数据库表默认指向member
@Column
的属性name对应数据库表的字段,如果不写默认是驼峰下划线匹配,比如private Long myId,如果不写得话,就是对应数据库表字段my_id
@Id:
把当前字段作为数据库主键使用,匹配数据库主键。如果不贴此注解,在某些查询语句的时候会把表字段一起作为联合主键查询
@GeneratedValue
让通用mapper在执行insert操作之后将自动生成的主键值回写到当前实体对象对应的属性当中
LOMBOK 下注解
@Data // getter、setter 提供了 equals()、hashCode()、toString() 方法
@AllArgsConstructor // 全参构造方法
@NoArgsConstructor // 无参构造方法
@Accessors(chain = true) // 链式编程写法 既可以注解在类上也可以注解在属性上
@ControllerAdvice 注解描述的类,spring mvc 会认为它是一个控制层全局异常处理对象
@RestControllerAdvice == @ControllerAdvice + @ResponseBody
@ExceptionHandler (RuntimeException.class) 注解描述的方法为异常处理方法
此注解中定义的异常类型,为这个方法可以处理的异常类型, 它可以处理此 异常以及这个异常类型的子类类型的异常
@PathVariable 注解用于从rest风格的url中取和参数对应的值
rest风格(一种架构风格)的url 其语法结构{变量名}/{变量}
指定日期 客户端----->数据库 @DateTimeFormat(pattern = “yyyy/MM/dd HH:mm”) set方法
@JsonFormat(pattern = “yyyy/MM/dd HH:mm:ss”,timezone = “GMT+8”) //此注解用于描述属性或get方法
@Aspect 注解描述的类型为spring AOP中的切面类型。@Order(1) @Order(2) 数字越小优先级越高,默认优先级比较低。 此对象中可以封装:
1.切入点(定义在哪些目标方法上进行功能扩展)
2.通知(封装功能扩展的业务逻辑 )
用于标识或者描述AOP中的切面类型,基于切面类型构建的对象用于为目标对象进行功能扩展或控制目标对象的执行。
@Slf4j 日志 import lombok.extern.slf4j.Slf4j;
@Pointcut 注解用于定义切入点,具体方式可以基于特定表达式进行实现 bean within excution @annotation
1.bean 为一种切入点表达式类型
2.sysUserServiceImpl 为spring容器中的一个名字,并首字母小写
涵义:sysUserServiceImpl对象中的任意方法执行时,都由本切面对象的通知方法做功能增强
@Pointcut("bean(sysUserServiceImpl)")
public void doLogPointcut() {} //方法不写代码 ,只为注解提供环境
1.bean 用于匹配指定bean对象的所有方法
▪ bean(“userServiceImpl”)指定一个userServiceImpl类中所有方法。
▪ bean("*ServiceImpl")指定所有后缀为ServiceImpl的类中所有方法。
2.within 用于匹配指定包下所有类内的所有方法
▪ within(“aop.service.UserServiceImpl”)指定当前包中这个类内部的所有方法。
▪ within(“aop.service.") 指定当前目录下的所有类的所有方法。
▪ within("aop.service…”) 指定当前目录以及子目录中类的所有方法。
3.excution 用于按指定语法规则匹配到具体方法
语法:execution(返回值类型 包名.类名.方法名(参数列表))。
▪ execution(void aop.service.UserServiceImpl.addUser())匹配addUser方法。
▪ execution(void aop.service.PersonServiceImpl.addUser(String)) 方法参数必须为String的addUser方法。
▪ execution(* aop.service….(…)) 万能配置。
@annotation 用于匹配指定注解修饰的方法
▪ @annotation(anno.RequiredLog) 匹配有此注解描述的方法。
▪ @annotation(anno.RequiredCache) 匹配有此注解描述的方法。
@Around 环绕通知:使用切入点为bean(sysUserServiceImpl)
用于描述切面中方法,这样的方法会被认为是一个环绕通知(核心业务方法执行之前和之后要执行的一个动作),@Aournd注解内部value属性的值为一个切入点表达式或者是切入点表达式的一个引用(这个引用为一个@PointCut注解描述的方法的方法名)。
特点:
1.编写
* 1.1.方法的返回值为Object
* 1.2.方法参数为ProceedingJoinPoint类型 连接点类型,此类型的对象用于封装要执行的目标方法相关的一些信息。一般用于@Around注解描述的方法参数。
* 1.3.方法抛出异常为throwable
2.应用
* 2.1.目标方法执行之前或之后都可以进行功能拓展
* 2.2.相对于其他通知优先级最高
* @param ProceedingJoinPoint 为一个连接对象(封装了正在执行的目标方法信息)
* @return 目标方法的返回值
* @throws Throwable
@Around("doLogPointcut()")
public Object around(ProceedingJoinPoint jp)throws Throwable{
log.info("method start {}",System.currentTimeMillis()); //开始
try {
Object result = jp.proceed();//最终会执行目标方法
log.info("method end {}",System.currentTimeMillis()); //结束
return result;
} catch (Throwable e) {
e.printStackTrace();
log.error("method error {}",System.currentTimeMillis()); //错误
throw e;
}
通知注解
@Pointcut
@Around
@Around.Before
@Before
@AfterReturning 核心业务正常
@AfterThrowing 核心业务出现异常
@After 不管是否正确都执行
@Around.After
Cache 缓存注解
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD,ElementType.TYPE}) @Target(ElementType.METHOD)
自定义注解:(使用@interface定义注解,默认所以注解都 继承 is a Annotation类型的对象)
@Target 注解用于告诉jdk我们自己写的注解描述的对象
@author MTA 注解用于告诉jdk我们自己写的注解何使有效
说明:所有的注解都是一种元素据(Menta Data)一种描述数据的数据(例如 使用注解描述类,描述方法,描述属性,描述方法参数等等)
@Transactiona spring 事务
当使用该注解表示所有方法都要进行事务控制,类上使用@Transactional注解用于定义方法上的事务共性,假如还有事务特性可以在对应的方法上继续使用@Transactional注解定义事务特性
@Transactional(readOnly = true) 之应用于查询方法
@Transactional(readOnly = false) 用于添加修改删除
@Transactional(readOnly = false,
rollbackFor = RuntimeException.class, 回滚
noRollbackFor = MyBatisSystemException.class)
@Transactional(readOnly = false,
rollbackFor = Throwable.class,
timeout = 10, 超时
isolation = Isolation.READ_COMMITTED) 事务特性 脏读 幻读 重复读
propagation = Propagation.REQUIRES_NEW) pa b gai seng
* 表示写日志的操作始终会运行在一个独立的事务中
@Async //异步 执行业务方法 @Async //注解描述的方法会运行在由spring框架提供的一个线程中。
@EnableAsync //异步 启动spring框架中的异步操作(底层会创建一个线程池)
@EnableCaching //启动Cache 缓存
@Cacheable(value = “menuCache”) //menuCache为缓存对象的名称 保存缓存
@CacheEvict(value = “menuCache”,allEntries = true,beforeInvocation = false) 清除缓存 清除所有 方法执行后
@Configuration 注解描述的类为一个配置对象,
此对象也会交给spring管理
@Bean 通常会配置@Configuration注解进行使用,其特点:
1.此注解描述方法会交给spring管理
2.@Beean注解没有指定其value属性的值,则bean的名字默认为方法名
@RequiresPermissions 这个注解描述的方法为一个切入点方法 .@RequiresPermissions(value=“sys:user:valid”)//value可以省略
此方法在执行之前需要进行权限检测(负责这个过程的方法是一个通知方法),假如用户权限中包含 @RequiresPermissions 注解value属性指定的值,则授权访问,不包含则抛出异常
京淘
@PropertySource
//动态的导入pro配置文件,交给spring容器进行加载
@PropertySource("classpath:/properties/redis.properties")
// :后 / 根目录是resources properties\redis.properties lunx中只有正斜杠
@Value("${redis.host}")
//spel(spring EL)表达式
lombok
@Accessors(chain = true) import lombok.experimental.Accessors;
//链式加载
User user = new User();
// user.getId();
user.setId(100)
.setName("ssss");
@Data
@Accessors(chain = true) //链式加载
@NoArgsConstructor //添加无参构造
@AllArgsConstructor //添加全参构造
@MapperScan(“com.jt.dao”)
//主要告诉Mapper的包路经,会自动的完成包扫描
不用再每个DAO类上添加注解@Mapper
DAO类中再添加注解@Mapper 不会影响程序正常运行
Mybaties-puls 中对对象pojo的注解
@TableName(“user”) //user可以省略
//将表与对象 进行一一对应
@TableId(type = IdType.AUTO)
//主键的信息 设定自增
@TableField(value = “name”)
//如果字段名称与属性的名称一致(包含驼峰规则映射),可以省略不写