你知道面试必问的AOP吗(2),我在华为做Java外包的真实经历

@Pointcut("execution (* com.xxx.service..*.*(..))")

public void cut(){}

/**

* 声明前置通知 并将通知应用到定义的切入点上

* 目标类方法执行前 执行该通知

*/

@Before(value="cut()")

public void before(){

 	System.out.println("前置通知.....");

}

/**

* 声明返回通知 并将通知应用到切入点上

* 目标类方法执行完毕执行该通知

*/

@AfterReturning(value="cut()")

public void afterReturning(){

	System.out.println("返回通知....");

}

/**

* 声明最终通知 并将通知应用到切入点上

* 目标类方法执行过程中是否发生异常 均会执行该通知 相当于异常中的 finally 

*/

@After(value="cut()")

public void after(){

	System.out.println("最终通知....");

}

/**

* 声明异常通知 并将通知应用到切入点上

* 目标类方法执行时发生异常 执行该通知

*/

@AfterThrowing(value="cut()",throwing="e")

public void afterThrowing(Exception e){

	System.out.println("异常通知....方法执行异常时执行:"+e);

}

/**

* 声明环绕通知 并将通知应用到切入点上

* 方法执行前后 通过环绕通知定义相应处理

*/

@Around(value="cut()")

public Object around(ProceedingJoinPoint pjp) throws Throwable{

    System.out.println("环绕前置...");

    System.out.println("环绕通知");

    System.out.println(pjp.getTarget()+"--"+pjp.getSignature());

    Object result=pjp.proceed();//执行目标对象方法

    System.out.println("环绕后置...");

    return result;

} 

}




**Aop 匹配方法规则表达式语言(简要了解)**



Aop 切入点表达式简介



执行任意公共方法:



execution(public *(…))




执行任意的 set 方法



execution(* set*(…))




执行 com.xxx.service 包下任意类的任意方法



execution(* com.xxx.service..(…))




执行 com.xxx.service 包 以及子包下任意类的任意方法



execution(* com.xxx.service….(…))




**xml 方式**



**配置切面、切入点、通知**



aop:config

<!-- aop 切面配置 -->

<aop:aspect ref="logCut">

    <!-- 定义 aop 切入点 -->

    <aop:pointcut expression="execution (* com.xxx.service..*.*(..))" 

    id="cut"/>

    <!-- 配置前置通知 指定前置通知方法名 并引用切入点定义 -->

    <aop:before method="before" pointcut-ref="cut"/>

    <!-- 配置返回通知 指定返回通知方法名 并引用切入点定义 -->

    <aop:after-returning method="afterReturning" pointcut-ref="cut"/>

    <!-- 配置异常通知 指定异常通知方法名 并引用切入点定义 -->

    <aop:after-throwing method="afterThrowing" throwing="e" pointcut-ref="cut"/>

    <!-- 配置最终通知 指定最终通知方法名 并引用切入点定义 -->

    <aop:after method="after" pointcut-ref="cut"/>

    <!-- 配置环绕通知 指定环绕通知方法名 并引用切入点定义 -->

    <aop:around method="around" pointcut-ref="cut"/>

</aop:aspect>

</aop:config>




定义 bean



/**

  • 声明切面组件

*/

@Component

public class LogCut {

public void before(){

	System.out.println("前置通知.....");

}

public void afterReturning(){

	System.out.println("返回通知....");

} 

public void after(){

	System.out.println("最终通知....");

}

public void afterThrowing(Exception e){

 System.out.println("异常通知....方法执行异常时执行:" + e);

}

public Object around(ProceedingJoinPoint pjp) throws Throwable{

    System.out.println("环绕前置...");

    System.out.println("环绕通知");

    System.out.println(pjp.getTarget()+"--"+pjp.getSignature());

    Object result=pjp.proceed();

    System.out.println("环绕后置...");

    return result;

}

}




[](https://gitee.com/vip204888/java-p7)扩展

---------------------------------------------------------------------



**AOP 的基本概念**





# 最后

看完美团、字节、腾讯这三家的面试问题,是不是感觉问的特别多,可能咱们又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。

开篇有提及我可是足足背下了1000道题目,多少还是有点用的呢,我看了下,上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下**互联网工程师必备的面试1000题**。

> 注意:不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友,**[直接戳这里即可免费下载](https://gitee.com/vip204888/java-p7)**

![最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?](https://img-blog.csdnimg.cn/img_convert/028a25d9c2fae320be9df963225f2931.png)

互联网工程师必备的面试1000题

而且从上面三家来看,**算法与数据结构是必备不可少的**呀,因此我建议大家可以去**刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》**,里面近**200道真实出现过的经典代码面试题**。

意:不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友,**[直接戳这里即可免费下载](https://gitee.com/vip204888/java-p7)**

[外链图片转存中...(img-cJ0G342G-1628434645629)]

互联网工程师必备的面试1000题

而且从上面三家来看,**算法与数据结构是必备不可少的**呀,因此我建议大家可以去**刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》**,里面近**200道真实出现过的经典代码面试题**。

![最新“美团+字节+腾讯”一二三面问题,挑战一下你能走到哪一面?](https://img-blog.csdnimg.cn/img_convert/19eb59ea19795c929e8bb04c4a07e2f3.png)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值