• 暂时停更一段时间!
  • 近期网站将陆续进行前端页面改造!
  • 招募网站编辑,联系站长!

基于AspectJ的AOP开发之XML开发方式

文章目录[隐藏]

使用 XML 配置切面

编写切面类

新建一个包 demo2,新建一个接口 CustomerDao

package com.jikewenku.aspectJ.demo2;

public interface CustomerDao {
    public void save();
    public String update();
    public void delete();
    public void findOne();
    public void findAll();
}

实现这个接口 CustomerDaoImpl

package com.jikewenku.aspectJ.demo2;

public class CustomerDaoImpl implements CustomerDao {
    public void save() {
        System.out.println("保存客户...");
    }

    public String update() {
        System.out.println("修改客户...");
        return "spring";
    }

    public void delete() {
        System.out.println("删除客户...");
    }

    public void findOne() {
        System.out.println("查询一个客户...");
//       int a = 1/ 0;
    }

    public void findAll() {
        System.out.println("查询多个客户...");
//        int b = 1/0;
    }
}

定义切面 MyAspectXml

package com.jikewenku.aspectJ.demo2;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;

public class MyAspectXml {

    // 前置通知
    public void before(JoinPoint joinPoint){
        System.out.println("XML 方式的前置通知=============="+joinPoint);
    }

    // 后置通知
    public void afterReturing(Object result){
        System.out.println("XML 方式的后置通知=============="+result);
    }

    // 环绕通知
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("XML 方式的环绕前通知==============");
        Object obj = joinPoint.proceed();
        System.out.println("XML 方式的环绕后通知==============");
        return obj;
    }

    // 异常抛出通知
    public void afterThrowing(Throwable e){
        System.out.println("XML 方式的异常抛出通知============="+e.getMessage());
    }

    // 最终通知
    public void after(){
        System.out.println("XML 方式的最终通知=================");
    }
}

创建一个配置文件 applicationContext2.xml,完成准备工作

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!--XML 的配置方式完成 AOP 的开发===============-->
    <!--配置目标类=================-->
    <bean id="customerDao" class="com.jikewenku.aspectJ.demo2.CustomerDaoImpl"/>

    <!--配置切面类-->
    <bean id="myAspectXml" class="com.jikewenku.aspectJ.demo2.MyAspectXml"/>

    <!--aop 的相关配置=================-->
    <aop:config>
        <!--配置切入点-->
        <aop:pointcut id="pointcut1" expression="execution(* com.jikewenku.aspectJ.demo2.CustomerDao.save(..))"/>
        <aop:pointcut id="pointcut2" expression="execution(* com.jikewenku.aspectJ.demo2.CustomerDao.update(..))"/>
        <aop:pointcut id="pointcut3" expression="execution(* com.jikewenku.aspectJ.demo2.CustomerDao.delete(..))"/>
        <aop:pointcut id="pointcut4" expression="execution(* com.jikewenku.aspectJ.demo2.CustomerDao.findOne(..))"/>
        <aop:pointcut id="pointcut5" expression="execution(* com.jikewenku.aspectJ.demo2.CustomerDao.findAll(..))"/>
        <!--配置 AOP 的切面-->
        <aop:aspect ref="myAspectXml">
            <!--配置前置通知-->
            <aop:before method="before" pointcut-ref="pointcut1"/>
            <!--配置后置通知-->
            <aop:after-returning method="afterReturing" pointcut-ref="pointcut2" returning="result"/>
            <!--配置环绕通知-->
            <aop:around method="around" pointcut-ref="pointcut3"/>
            <!--配置异常抛出通知-->
            <aop:after-throwing method="afterThrowing" pointcut-ref="pointcut4" throwing="e"/>
            <!--配置最终通知-->
            <aop:after method="after" pointcut-ref="pointcut5"/>
        </aop:aspect>

    </aop:config>
</beans>

写一个测试类SpringDemo2

package com.jikewenku.aspectJ.demo2;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.<a href="https://www.jikewenku.com/tag/spring" title="查看更多关于 Spring 的文章" target="_blank">Spring</a>JUnit4ClassRunner;

import javax.annotation.Resource;

@RunWith(<a href="https://www.jikewenku.com/tag/spring" title="查看更多关于 Spring 的文章" target="_blank">Spring</a>JUnit4ClassRunner.class)
@ContextConfiguration(value="classpath:applicationContext2.xml")
public class <a href="https://www.jikewenku.com/tag/spring" title="查看更多关于 Spring 的文章" target="_blank">Spring</a>Demo2 {

    @Resource(name="customerDao")
    private CustomerDao customerDao;

    @Test
    public void demo1(){
        customerDao.save();
        customerDao.update();
        customerDao.delete();
        customerDao.findOne();
        customerDao.findAll();
    }
}


丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:基于 AspectJ 的 AOP 开发之 XML 开发方式
喜欢 (0)
[247507792@qq.com]
分享 (0)

邀请您免费 注册账号 登录 即可参与讨论!