SpringBoot自定义注解

@Aspect 标注类可以使用切面
  1. @Pointcut:标注方法的执行点,不需要在方法体内编写实际代码。

  2. @Around:由你来控制什么时候执行目标方法

  3. @AfterReturning:在目标方法没有异常退出时执行

  4. @Before:在目标方法之前执行

  5. @AfterThrowing:在目标方法异常退出时候执行

  6. @After: 目标方法不管是抛出异常或者正常退出都会执行

/**
 * execution 匹配在方法执行时触发,例:execution(方法修饰符_可选 返回类型 方法名 参数 异常模式_可选)
 * \@annotation() 匹配标注了指定注解的目标类方法,例:@Transactional
 * args() 匹配使用了指定参数的方法,例:args(String) ,表示有且仅有一个String型参数的方法
 * \@args() 匹配使用了指定参数的方法,如 @args(org.springframework.stereotype.Service) 表示有且仅有一个标注了@Service的类参数的方法
 * within() 匹配类名指定切点,如 with(com.example.Demo) 表示Demo的所有方法
 * \@within() 匹配标注了指定注解的类及其所有子类 如@within(org.springframework.stereotype.Service) 
 * \@target() 所有标注了指定注解的类 如@target(org.springframework.stereotype.Service)表示所有标注了@Service的类的所有方法
 * target() 通过类名指定,同时包含所有子类 如 target(com.example.Demo) 
 * this() 大部分时候和target()相同,区别是this是在运行时生成代理类后,才判断代理类与指定的对象类型是否匹配
 */
@Pointcut("execution(* com.spring.annotation.aop.IBuy.buy(..))")
public void inPointCut(){

}
@ControllerAdvice

1.配合 @ModelAttribute 可以配置全局的模型属性,每次http的请求都会被调用一次。

2.配合 @ExceptionHandler 可以做全局的Controllder异常处理。若@ExceptionHandler单独使用,只对当前的类的Controller有影响。Github有Demo

@value里#和$的区别?

属性取值表达式“$”开头,用来获取配置文件中的值,格式:${expression}。不可以嵌套SpEL表达式,不过SpEL表达式可以嵌套属性取值表达式

SpEL表达式以“#”开头,表达式主体包围在花括号中,格式:#{expression},详细见下面的例子.

Spel

//算数运算
@Value("#{19 + 1}") // 20
private double add;

//逻辑运算
@Value("#{250 > 200 && 200 < 4000}") // true
private boolean and;

//正则表达式
@Value("#{'100' matches '\\d+' }") // true
private boolean validNumericStringResult;
@Autowired和@Resource之间的区别?

@Autowired默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在(可以设置它required属性为false)。

@Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入。常用语第三方jar包的类引入。

当多个事务同时存在的时候,spring如何处理这些事务的行为?
  1. PROPAGATION_REQUIRED:(默认)能满足绝大部分业务需求,如果外层有事务,则当前事务加入到外层事务,一块提交,一块回滚。如果外层没有事务,新建一个事务执行。

  2. PROPAGATION_REQUIRES_NEW:该事务传播机制是每次都会新开启一个事务,同时把外层事务挂起,当前事务执行完毕,恢复上层事务的执行。如果外层没有事务,执行当前新开启的事务即可。

  3. PROPAGATION_SUPPORTS:如果外层有事务,则加入外层事务,如果外层没有事务,则直接使用非事务方式执行。完全依赖外层的事务

  4. PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

  5. PROPAGATION_MANDATORY:如果外层存在事务,就加入该事务,如果外层不存在事务,就抛出异常。

  6. PROPAGATION_NEVER:以非事务方式执行,如果外层存在事务,则抛出异常。

  7. PROPAGATION_NESTED:一个 “嵌套的” 事务,  它是已经存在事务的一个真正的子事务. 潜套事务开始执行时,  它将取得一个 savepoint. 如果这个嵌套事务失败, 我们将回滚到此 savepoint. 潜套事务是外部事务的一部分, 只有外部事务结束后它才会被提交.

//可以加在类上,方法级别的注解会覆盖类的注解
@Transactional(propagation= Propagation.SUPPORTS,readOnly=true)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值