xml实现aop

1.添加包

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

2.添加aop.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       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/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!-- dao 实例 -->

    <bean id="userService" class="com.stude.aop.aspect.UserXml"></bean>
    <!-- 切面类 -->
    <bean id="aop" class="com.stude.aop.aspect.AopXmlAspect"></bean>
    <!-- Aop配置 -->
    <aop:config>
        <!-- 定义一个切入点表达式: 拦截哪些方法 -->
        <aop:pointcut expression="execution(* com.stude.aop.aspect.UserXml.*(..))"
                      id="pt"/>
        <!-- 切面 -->
        <aop:aspect ref="aop">
            <!-- 环绕通知 -->
            <aop:around method="around" pointcut-ref="pt"/>
            <!-- 前置通知: 在目标方法调用前执行 -->
            <aop:before method="begin" pointcut-ref="pt"/>
            <!-- 后置通知: -->
            <aop:after method="commit" pointcut-ref="pt"/>
            <!-- 返回后通知 -->
            <aop:after-returning method="returning"
                                 pointcut-ref="pt"/>
            <!-- 异常通知 -->
            <aop:after-throwing method="afterThrowing"
                                pointcut-ref="pt"/>
        </aop:aspect>
    </aop:config>

</beans>

3.切面类

/**
 * Created on 2019/4/5.
 *
 * @author Grak
 * @since 1.0
 */
public class AopXmlAspect {

    // 前置通知
    public void begin() {
        System.out.println("前置通知");
    }

    //
    // 后置通知
    public void commit() {
        System.out.println("后置通知");
    }

    // 运行通知
    public void returning() {
        System.out.println("运行通知");
    }

    // 异常通知
    public void afterThrowing() {
        System.out.println("异常通知");
    }

    // 环绕通知
    public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        System.out.println("环绕通知开始");
        proceedingJoinPoint.proceed();
        System.out.println("环绕通知结束");
    }
}

4、实例方法

/**
 * Created on 2019/4/5.
 *
 * @author Grak
 * @since 1.0
 */
@Component
public class UserXml {

    public void add(String message) {
        System.out.println("执行UserXml添加方法:" + message);
    }

}
@ImportResource("classpath:aop.xml")
@SpringBootApplication
public class AopApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext ctx = SpringApplication.run(AopApplication.class, args);

        //AopXmlAspect执行
        UserXml user = (UserXml) ctx.getBean("userXml");
        user.add("sssss");

    }
}

猜你喜欢

转载自blog.csdn.net/qq_35418518/article/details/89069061