victory的博客

长安一片月,万户捣衣声

0%

spring | 以XML方式配置切面

以XML方式配置切面

1.项目目录

2.MathI.java(接口)

package com.atguigu.spring.aopxml;

public interface MathI {
    int add(int i, int j);
    int sub(int i, int j);
    int mul(int i, int j);
    int div(int i, int j);
}

3.MathImpl.java(实现类)

package com.atguigu.spring.aopxml;

import org.springframework.stereotype.Component;

@Component
public class MathImpl implements MathI{

    @Override
    public int add(int i, int j) {
        int result = i + j;
        return result;
    }
    
    @Override
    public int sub(int i, int j) {
        int result = i - j;
        return result;
    }

    @Override
    public int mul(int i, int j) {
        int result = i * j;
        return result; 
    }

    @Override
    public int div(int i, int j) {
        int result = i / j;
        return result;
    }
}

4.MyLogger.java(切面)

package com.atguigu.spring.aopxml;

import org.springframework.stereotype.Component;

@Component
public class MyLogger {
    public void before(){
        System.out.println("前置通知");
    }
}

5.aop-xml.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"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">

    <context:component-scan base-package="com.atguigu.spring.aopxml"></context:component-scan>
    
    <!-- 以XML方式配置切面  -->
    <aop:config>
        <!-- 切面 -->
        <aop:aspect ref="myLogger">
            <!-- 前置通知 通知通过切入点表达式作用于连接点-->
            <!-- <aop:before method="before" pointcut="execution(* com.atguigu.spring.aopxml.*.*(..))"/> -->
            
            <aop:pointcut expression="execution(* com.atguigu.spring.aopxml.*.*(..))" id="cut"/>
            <aop:before method="before" pointcut-ref="cut"/>
        </aop:aspect>
    </aop:config>
</beans>

6.Test.java(测试类)

package com.atguigu.spring.aopxml;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("aop-xml.xml");
        MathI math = ac.getBean("mathImpl", MathI.class);
        int add = math.add(2, 2);
        System.out.println(add);
    }

}

7.运行结果

前置通知
4