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实现。

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

猜你喜欢

转载自blog.csdn.net/qq_39428182/article/details/105793701