通过xml配置aop过程

  • Post author:
  • Post category:其他


添加aspectJ依赖

<!--添加ajpectJ依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>

创建spring配置文件

项目结构:

1.目标类 UserService.java


public class UserServiceImpl implements UserService {
    @Override
    public User getUserByName(String username, Integer age) {
        User user = new User();
        user.setAge(age);
        user.setUsername(username);
        return user;
    }

    @Override
    public int getUserCounts() {
        return 32;
    }
}

2.切面类 UserAspectJ.java

// UserService的代理类,可以为目标类添加额外的方法;使用spring的aop机制,通过xml进行配置
public class UserAspectJ {

    // 输出当前系统时间
    void getCurData() {
        Date date = new Date();
        SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd");
        String curTime = dft.format(date);
        System.out.println(curTime);
    }

    void getCommitInfo() {
        System.out.println("方法执行结束,事务已提交");
    }

}

– 在spring配置文件中创建相应的切面类和目标类

<!--创建目标类和切面类交由spring进行管理-->
    <bean id="target" class="com.righteye.spring.pratice.service.impl.UserServiceImpl"></bean>

    <bean id="myAspectJ" class="com.righteye.spring.pratice.proxy.UserAspectJ"></bean>

– 使用aop:config 配置aop的配置,将相关操作如切入点表达式写在config标签中间

1. 使用

<aop:aspect>

配置切面

参数说明:

id, 为切面提供唯一的标识; ref, 引用切面实现类

2. 使用

<aop:pointcut>

配置切入点表达式

参数说明:

id, 切入点标识; expression, 切入点表达式,为哪个类添加切面

3. 使用

<aop:xxx>

指明具体的方法引用切入点表达式;指定切入时间

参数说明:

根据aop:xxx的具体不同声明不同的切入时间,method为切面中提供的方法

    <aop:config>

        <aop:aspect id="AspectJConfig" ref="myAspectJ">

            <!--指定切入点, 表明要为哪个目标类添加切面-->
            <aop:pointcut id="pointcut" expression="execution(* com.righteye.spring.pratice.service.impl.*.*(..))"></aop:pointcut>

            <!--指定切入时间-->
            <aop:before method="getCurData" pointcut-ref="pointcut"></aop:before>
            <aop:after method="getCommitInfo" pointcut-ref="pointcut"></aop:after>

        </aop:aspect>

    </aop:config>


完整配置:

<?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 https://www.springframework.org/schema/aop/spring-aop.xsd">

    <!--创建目标类和切面类交由spring进行管理-->
    <bean id="target" class="com.righteye.spring.pratice.service.impl.UserServiceImpl"></bean>

    <bean id="myAspectJ" class="com.righteye.spring.pratice.proxy.UserAspectJ"></bean>


    <aop:config>

        <aop:aspect id="AspectJConfig" ref="myAspectJ">

            <!--指定切入点, 表明要为哪个目标类添加切面-->
            <aop:pointcut id="pointcut" expression="execution(* com.righteye.spring.pratice.service.impl.*.*(..))"></aop:pointcut>

            <!--指定切入时间-->
            <aop:before method="getCurData" pointcut-ref="pointcut"></aop:before>
            <aop:after method="getCommitInfo" pointcut-ref="pointcut"></aop:after>

        </aop:aspect>

    </aop:config>



</beans>


测试代码:

 @Test
    public void testAspectJByXml() {
        ApplicationContext ac = new ClassPathXmlApplicationContext("pratice/demo01/applicationContext.xml");
        UserService userService = (UserService) ac.getBean("target");
        User user = userService.getUserByName("索隆", 18);
        System.out.println(user);
        System.out.println("-----------华丽分割线-------------");
        int count = userService.getUserCounts();
        System.out.println("数量:" + count);
    }

总结

主要记录使用xml如何配置aop, 使用xml进行配置,可以减少在java代码中大量引入切面加入的时间,如@Before, @After等等



版权声明:本文为qq_45888932原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。