文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

spring切面如何使用传递给被通知方法的参数

2023-05-30 18:57

关注

小编给大家分享一下spring切面如何使用传递给被通知方法的参数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

具体如下:

场景:

BlankDisc代表CD实体,可以通过playTrack()方法直接播放某一个磁道中的歌曲。

需求是记录每个磁道被播放的次数。

一种方法就是修改playTrack()方法,直接在每次调用的时候记录这个数量。但是,记录磁道的播放次数与播放本身是不同的关注点,因此不应该属于playTrack()方法。这应该是切面要完成的任务。

CompactDisc接口

public interface CompactDisc {    //播放某一个磁道中的歌曲   void playTrack(String track);  }

实现类BlankDisc

public class BlankDisc implements CompactDisc {    private String title;   private String artist;   private List<String> tracks;    public void setTitle(String title) {     this.title = title;   }    public void setArtist(String artist) {     this.artist = artist;   }    public void setTracks(List<String> tracks) {     this.tracks = tracks;   }    @Override   public void playTrack(String track) {     System.out.println("-Track: " + track);   }  }

切面类TraceCount 

 @Component @Aspect public class TrackCounter {    private Map<String, Integer> trackCounts = new HashMap<>();    @Pointcut("execution(* chapter04.aop_args.BlankDisc.playTrack(String)) && args(track)")   public void trackPlayed(String track) {   }    //在播放前,为该磁道计数   @Before("trackPlayed(track)")   public void countTrack(String track) {     int currentCount = getPlayCount(track);     trackCounts.put(track, currentCount + 1);   }    public int getPlayCount(String track) {     return trackCounts.containsKey(track) ? trackCounts.get(track) : 0;   } }

applicationContext.xml配置文件

<context:component-scan base-package="aop_test,chapter04"/>  <bean id="compactDisc"    class="chapter04.aop_args.BlankDisc">   <property name="title" value="Sgt. Pepper's Lonely Hearts Club Band" />   <property name="artist" value="The Beatles" />   <property name="tracks">     <list>       <value>Sgt. Pepper's Lonely Hearts Club Band</value>       <value>With a Little Help from My Friends</value>       <value>Lucy in the Sky with Diamonds</value>       <value>Getting Better</value>       <value>Fixing a Hole</value>       <value>She's Leaving Home</value>       <value>Being for the Benefit of Mr. Kite!</value>       <value>Within You Without You</value>       <value>When I'm Sixty-Four</value>       <value>Lovely Rita</value>       <value>Good Morning Good Morning</value>       <value>Sgt. Pepper's Lonely Hearts Club Band (Reprise)</value>       <value>A Day in the Life</value>     </list>   </property> </bean>  <!-- 开启aop注解 --> <aop:aspectj-autoproxy/>

测试

@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class test_aop_args {    @Autowired   CompactDisc cd;    @Autowired   TrackCounter trackCounter;    @Test   public void test(){     cd.playTrack("Sgt. Pepper's Lonely Hearts Club Band");     cd.playTrack("With a Little Help from My Friends");     cd.playTrack("Lucy in the Sky with Diamonds");     cd.playTrack("Sgt. Pepper's Lonely Hearts Club Band");     cd.playTrack("With a Little Help from My Friends");     cd.playTrack("Sgt. Pepper's Lonely Hearts Club Band");      System.out.println(trackCounter.getPlayCount("Sgt. Pepper's Lonely Hearts Club Band"));     System.out.println(trackCounter.getPlayCount("With a Little Help from My Friends"));     System.out.println(trackCounter.getPlayCount("Lucy in the Sky with Diamonds"));     System.out.println(trackCounter.getPlayCount("Getting Better"));   } }

测试结果 3,2,1,0

以上是“spring切面如何使用传递给被通知方法的参数”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯