1. 1 不可撤销
  2. 2 小年兽 程嘉敏
  3. 3 手放开 李圣杰
  4. 4 迷人的危险3(翻自 dance flow) FAFA
  5. 5 山楂树之恋 程佳佳
  6. 6 summertime cinnamons / evening cinema
  7. 7 不谓侠(Cover 萧忆情Alex) CRITTY
  8. 8 神武醉相思(翻自 优我女团) 双笙
  9. 9 空山新雨后 音阙诗听 / 锦零
  10. 10 Wonderful U (Demo Version) AGA
  11. 11 广寒宫 丸子呦
  12. 12 陪我看日出 回音哥
  13. 13 春夏秋冬的你 王宇良
  14. 14 世界が终わるまでは… WANDS
  15. 15 多想在平庸的生活拥抱你 隔壁老樊
  16. 16 千禧 徐秉龙
  17. 17 我的一个道姑朋友 双笙
  18. 18 大鱼  (Cover 周深) 双笙
  19. 19 霜雪千年(Cover 洛天依 / 乐正绫) 双笙 / 封茗囧菌
  20. 20 云烟成雨(翻自 房东的猫) 周玥
  21. 21 情深深雨濛濛 杨胖雨
  22. 22 Five Hundred Miles Justin Timberlake / Carey Mulligan / Stark Sands
  23. 23 斑马斑马 房东的猫
  24. 24 See You Again Wiz Khalifa / Charlie Puth
  25. 25 Faded Alan Walker / Iselin Solheim
  26. 26 Natural J.Fla
  27. 27 New Soul Vox Angeli
  28. 28 ハレハレヤ(朗朗晴天)(翻自 v flower) 猫瑾
  29. 29 像鱼 王贰浪
  30. 30 Bye Bye Bye Lovestoned
  31. 31 Blame You 眠 / Lopu$
  32. 32 Believer J.Fla
  33. 33 书信 戴羽彤
  34. 34 柴 鱼 の c a l l i n g【已售】 幸子小姐拜托了
  35. 35 夜空中最亮的星(翻自 逃跑计划) 戴羽彤
  36. 36 慢慢喜欢你 LIve版(翻自 莫文蔚) 戴羽彤
  37. 37 病变(翻自 cubi) 戴羽彤
  38. 38 那女孩对我说 (完整版) Uu
  39. 39 绿色 陈雪凝
  40. 40 月牙湾 LIve版(翻自 F.I.R.) 戴羽彤
夜空中最亮的星(翻自 逃跑计划) - 戴羽彤
00:00 / 04:10

夜空中最亮的星 能否听清

那仰望的人 心底的孤独和叹息

夜空中最亮的星 能否记起

那曾与我同行 消失在风里的身影

我祈祷拥有一颗透明的心灵

和会流泪的眼睛

给我再去相信的勇气

越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请指引我靠近你

夜空中最亮的星 是否知道

那曾与我同行的身影 如今在哪里

夜空中最亮的星 是否在意

是等太阳先升起 还是意外先来临

我宁愿所有痛苦都留在心底

也不愿忘记你的眼睛

哦 给我再去相信的勇气

哦 越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请照亮我向前行 哒~

我祈祷拥有一颗透明的心灵

和会流泪的眼睛 哦

给我再去相信的勇气

哦 越过谎言去拥抱你

每当我找不到存在的意义

每当我迷失在黑夜里

噢喔喔 夜空中最亮的星

请照亮我向前行

AOP常用注解

1、@Aspect

  • 配置切面Bean,和<bean.../>元素进行配置无区别,一样支持依赖注入来配置属性值;
  • 如果启动了Spring的“零配置”特性,一样可以让Spring自动搜索,并加载指定路径下的切面Bean
  • 使用@Aspect修饰的类(切面类)和其他类一样可以有方法、成员变量定义,还可能包括切入点、增强处理定义
  • 使用@Aspect修饰类,Spring将不会把该Bean当成组件Bean处理,因此负责自动增强的后处理Bean将会略过该Bean,不会对该Bean进行任何增强处理

2、@Before

  • 修饰一个方法时,该方法将作为Before增强处理
  • 使用@Before修饰事,需要指定一个value属性值,该属性值指定一个切入点表达式(既可以是一个已有的切入点,也可以直接定义切入点表达式),用于指定该增强处理将被织入哪些切入点
  • 表示在切入点执行前需要进行的操作或者需要执行的方法

3、@After

  • 同Before
  • 表示在切入点执行后,进行哪些操作
  • 通常用于资源释放

4、@AfterReturning

  • 同上
  • 使用@AfterReturning增强处理可指定如下常用属性
    • pointcut/value:用于指定该切入点对应的切入表达式,当指定了pointcut属性值后,value属性值将会被覆盖
    • returning:该属性值指定一个形参名,用于表示Advuce方法中可以定义与此同名的形参,该形参可用于访问目标方法的返回值
      • 在Advice方法中定义该形参时指定的类型,会限制目标方法必须返回指定类型的值或没有返回值
  • AfterReturning增强处理只有在目标方法成功完成后才会被织入
  • After增强处理不管目标方法时如何结束的(成功或抛出异常),它都会被织入

5、@AfterThrowing

  • 同上
  • 使用@AfterThrowing注解时可指定如下两个常用属性:
    • pointcut/value:用于指定该切入点对应的切入表达式,当指定了pointcut属性值后,value属性值将会被覆盖
    • throwing:该属性值指定一个形参名,用于表示Advice方法中可以定义与此同名的形参,该形参可用于访问目标方法抛出的异常
    • 在Advice方法中定义该形参时指定的类型,会限制目标方法必须抛出指定类型的异常

6、@Around

  • Around增强处理是功能比较强大的增强处理;
  • 近似等于Before增强处理和AfterReturning增强处理的总和
  • 既可以在执行目标方法之前织入增强动作,也可以在执行目标方法之后织入增强动作
  • Around增强处理可以改变执行目标方法的参数值,也可以改变执行目标方法之后的返回值
  • Around增强处理虽然功能强大,但通常需要在线程安全的环境下使用,所以一般用Before和AfterReturning增强处理能解决的问题,不建议用Around
  • 如果需要目标方法执行之前和之后共享某种状态数据,则应该考虑使用Around增强处理;尤其是需要改变目标方法的返回值时,则只能使用Around增强处理了
  • @Around增强处理事,需要指定一个value属性,该属性指定该增强处理被植入的切入点
  • 当定义一个Around增强处理方法时,该方法的第一个形参必须是ProceedingJoinPoint类型(至少包含一个形参),在增强处理方法体内,调用ProceedingJoinPoint参数的proceed()方法才会执行目标方法——这就是Around增强处理可以完全控制目标方法的执行时机、如何执行的关键;如果程序没有调用ProceedingJoinPoint参数的proceed()方法,则目标方法不会被执行。
  • 调用ProceedingJoinPoint参数的proceed()方法时,还可以传入一个Object[]对象作为参数,该数组中的值将被传入目标方法作为执行方法的实参
package com.sysker.aspect;

import java.util.Arrays;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class TxAspect {
    @Around("execution(* com.sysker.impl.*.*(..))")
    public Object changeValue(ProceedingJoinPoint jp) throws Throwable {
        System.out.println("TxAspect执行目标方法之前,模拟开始事务。。。");
        Object[] args = jp.getArgs();
        if(args != null && args.length > 1) {
            args[0] = "change00" + args[0];
        }
        Object rvt = jp.proceed(args);
        System.out.println("TxAspect执行目标方法之后,模拟结束事务。。。");
        if(rvt != null && rvt instanceof Integer) {
            rvt = (Integer)rvt*(Integer)rvt;
        }
        System.out.println(rvt);
        return rvt;
    }
    @Before("execution(* com.sysker.impl.*.*(..))")
    public void authority(JoinPoint jp) {
        System.out.println("TxAspect模拟执行权限检查");
        System.out.println("Before增强:被织入增强处理的目标方法:" + jp.getSignature().getName());
        System.out.println("Before增强:被织入增强处理的目标方法的参数:" + Arrays.toString(jp.getArgs()));
        System.out.println("Before增强:被织入增强处理的目标对象为:" + jp.getTarget());
    }

    @After("execution(* com.sysker.impl.*.*(..))")
    public void show() {
        System.out.println("TxAspect模拟释放资源");
    }
    @AfterThrowing(throwing = "ex", pointcut = "execution(* com.sysker.impl.*.*(..))")
    public void doRecoveryAciton(Throwable ex) {
        System.out.println("目标抛出的异常:" + ex);
        System.out.println("模拟Advice对异常进行修复");
    }
    
    
}

posted @ 2018-06-30 16:58  云中志  阅读(2247)  评论(0编辑  收藏  举报