最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring注解配置AOP導(dǎo)致通知執(zhí)行順序紊亂解決方案

 更新時間:2020年10月23日 10:22:51   作者:dqlai  
這篇文章主要介紹了Spring注解配置AOP導(dǎo)致通知執(zhí)行順序紊亂解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

今天在測試Spring的AOP時,發(fā)現(xiàn)使用注解配置AOP的方式會導(dǎo)致通知的執(zhí)行順序紊亂?!咀罱K通知居然在異常通知之前執(zhí)行了】

測試代碼

(1)定義TargetInterface目標(biāo)接口

public interface TargetInterface {
public abstract void targetProxy();
}

(2)定義TargetImpl目標(biāo)類

@Component("target")
public class TargetImpl implements TargetInterface {
public void targetProxy() {
  System.out.println("target proxy ......");
  int i = 1/0;//異常
}
}

(3)定義切面類(內(nèi)含增強(qiáng)方法)

@Component("myAspect")//定義切面類
@Aspect//聲明當(dāng)前類是切面類
public class TargetAspect {

//定義切點(diǎn)表達(dá)式
@Pointcut("execution(* com.ahzyy.target.impl.*.*(..))")
public void pt() {
}

@Before("pt()")
public void before() {

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

@After("pt()")
public void after() {

  System.out.println("最終通知......");
}

@AfterReturning("pt()")
public void afterReturning() {

  System.out.println("后置通知......");
}

@AfterThrowing("pt()")
public void afterThrowing() {

  System.out.println("異常通知......");
}
}

(4)配置applicationContextAnno.xml文件

<!--配置組件掃描的包-->
<context:component-scan base-package="com.ahzyy"/>
<!--配置AOP自動代理-->
<aop:aspectj-autoproxy/>

(5)定義測試類

@RunWith(SpringJUnit4ClassRunner.class)
//@ContextConfiguration("classpath:applicationContext.xml")
@ContextConfiguration("classpath:applicationContextAnno.xml")
public class AopTest {

@Autowired
private TargetInterface target;

@Test
public void test01() {

  target.targetProxy();
}
}

(6)運(yùn)行結(jié)果:


【最終通知在異常通知之前執(zhí)行了!!!】

(7)解決方法:

(7.1)使用xml配置方式配置AOP;

(7.2)注解使用@Around(環(huán)繞通知)方式配置AOP(修改TargetAspect類使用環(huán)繞通知);

@Component("myAspect")//定義切面類
@Aspect//聲明當(dāng)前類是切面類
public class TargetAspect {

//定義切點(diǎn)表達(dá)式
@Pointcut("execution(* com.ahzyy.target.impl.*.*(..))")
public void pt() {
}

@Around("pt()")
public Object aroundNotice(ProceedingJoinPoint pjp) {

  System.out.println("環(huán)繞通知");
  Object result = null;

  before();//前置通知
  try {
    result = pjp.proceed();

    afterReturning();//后置通知
  } catch (Throwable throwable) {
    
    afterThrowing();//異常通知
    throwable.printStackTrace();
  }
  after();//最終通知

  return result;
}

public void before() {

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

public void afterReturning() {

  System.out.println("后置通知......");
}

public void afterThrowing() {

  System.out.println("異常通知......");
}

public void after() {

  System.out.println("最終通知......");
}
}

(7.3)運(yùn)行結(jié)果

[運(yùn)行順序正確]

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

太仓市| 宁夏| 遂平县| 莒南县| 香格里拉县| 武强县| 罗定市| 望奎县| 德保县| 永修县| 桂东县| 崇信县| 桐庐县| 揭阳市| 增城市| 西林县| 肃南| 富蕴县| 新乡市| 金湖县| 寿阳县| 安丘市| 神池县| 涿州市| 固阳县| 家居| 馆陶县| 桃园市| 红河县| 平利县| 南宁市| 涿鹿县| 顺义区| 盱眙县| 治县。| 双城市| 寿光市| 涪陵区| 巴林左旗| 荃湾区| 靖西县|