AOP-基于xml的实现

AOP-基于xml的实现

我们在上几篇文章中实现了关于AOP基于注解的实现,在本文中,我们基于xml配置文件进行实现

首先我们补充一个知识点,下文能用到,Pointcut,定义和管理切入点。

    @Pointcut(value ="execution(* com.yuyi.serviec.SomeserviceImpl.doSome())")
    private void myexe(){
//无需代码
    }

我们定义一个方法,不用实现,在方法上方加入@Pointcut,写入切入点执行位置。

    @After(value = "myexe()")
    public void myThrowing()  {

        System.out.println("我是最终通知,可以做资源的回收,内存的释放!");
    }

在切入方法的上方的切入点位置,我们就可以直接使用定义的方法名作为属性!方便我们管理切入点。

好,言归正传我们学习在xml中实现AOP功能。

新建目标类

public class SomeserviceImpl implements Someservice {
    @Override
    public void  doSome() {
        System.out.println("someservice的doSome方法!");

    }
}

新建切面类及方法

public class MyAspect {


    public void myAfter()  {

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

我们并不是使用注解作为AOP的实现,所以,我们不用加注解,读者可以和我之前讲的对比。
现在我们以前置通知为例,配置xml文件,步骤如下

1.声明目标类

<!--    声明目标类-->
    <bean id="someservice" class="com.yuyi.serviec.SomeserviceImpl"/>

声明切面类

<!--    声明切面类-->
    <bean id="myaspect" class="com.yuyi.aspect.MyAspect"/>

2.配置AOP标签

<!--配置aop,把通知和切入点的内容放入配置文件中,使用标签和属性来完成-->
   <aop:config >
<!--       声明切入点表达式-->
       <aop:pointcut id="somepoint" expression="execution(* com.yuyi.serviec.SomeserviceImpl.doSome())"/>
       <aop:aspect ref="myaspect">
           <aop:before method="myAfter" pointcut-ref="somepoint"></aop:before>
       </aop:aspect>
   </aop:config>
</beans>

我们知道,切面类的执行需要两个要素:执行时间和执行位置。
我们使用 <aop:config >标签,在他的子标签中使用aop:pointcut 配置切入点表达式。
给它起个别名,作为id的值,expression 是赋值切入点的位置。
我们使用aop:aspect 标签,来声明切面类。
ref属性是切面类的id,aop:before 来表明通知的类型,method属性表明切入方法,pointcut-ref即上方切入点的id。
这样我们就配置成功了一个基于XML的aop实现。

我们运行测试类
在这里插入图片描述
与我们用标签实现的前置通知一模一样。
对比我们的基于注解的实现,我们不需要在类和方法上使用标签,也不需要使用代理生成器。
我们在后期会使用这种方法来配置事务,修改起来十分方便!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值