黄晓童SPRING学习笔记:对AOP的初步理解

Spring的定义
对DI的初步理解
对AOP的初步理解
对DI的深入探究
对AOP的深入探究
Spring的事务管理
Spring MVC

接下来阐述一下我对AOP的理解,还是回到之前那个骑士和寻找圣杯的场景来。现在场景稍有改变,在骑士寻找圣杯的时候,要有一个诗人陪伴他,以朗诵诗歌的形式为他歌功颂德。按照以往的方式,最容易想到的一个方法就是:定义一个诗人的类,里面包含唱歌的方法,然后在骑士类里面有一个诗人类的实例,并在执行任务方法里调用诗人的唱歌方法。代码如下:

public class ShiRen
{
 public void singBefore()
 {
  System.out.println(“sing  before”);
 }
 public void singAfter()
 {
  System.out.println(“sing  after”);
 }
}

 

上面的是新定义的诗人类,下面我们将修改前面的骑士类:

Public  class  QiShi  implement  RenLei
{
 private  RenWu  renWu;
 public void setRenWu (RenWu  renWu )
 {
  this.renwu = renWu ;
 }
 
 private  ShiRen  shiRen;
 public void setShiRen (ShiRen  shiRen )
 {
  this. shiRen = shiRen;
 }
 
 public  ShengBei  zhiXingRenWu () 
 {
  shiRen.singBefore();
 ShengBei  s  =  renWu. zhiXing ();
 shiRen.singAfter();
 return  s;
 }
}

 
 代码修改完毕,看上去没什么问题了。可是仔细一看就会发现这里面有个严重的问题:每次骑士寻找圣杯的时候,他都需要先停下来告诉诗人去朗诵诗歌,如果他忘记了去告诉诗人,诗人就不会去朗诵诗歌了。其实,诗人朗诵诗歌这件事骑士是不关心的。骑士要做的就是寻找圣杯,提醒诗人朗诵诗歌这件事已经超出了他的职责范围。
 通过上面的场景,我们已经发现了传统方法暴露出来的问题。这时我们就需要AOP技术的帮助。AOP用来帮助业务的分离,服务模块化,从而使这些组件更加专注于自身的业务。

下面我们在xml配置文件中追加如下代码段:

<bean id="shiRen" class="com.alibaba.ShiRen"/>
<aop:config>
 <aop:aspect ref="shiRen">
 <aop:pointcut  id="pointcut"  expression="execution(* *. zhiXingRenWu(..))" />
 <aop:before  method="singBefore"  pointcut-ref="pointcut" />
 <aop:after-returning  method="singAfter"  pointcut-ref="pointcut" />
 </aop:aspect>
</aop:config>

 

然后,我们将骑士类再改回原来的样子就行了。在这里,我们将诗人声明为一个切面。至于配置文件里的具体细节后面会提到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值