Spring Aspect强化通知

1、使用动态代理技术,完成如下业务。

   使用一个代理对象,实现对普通售货员和普通服务员的代理

   普通售货员具有挑选方法,问客户“购买什么商品”。要求代理对象在前边加入“您好,欢迎光临”字样。

   普通售货员具有让客户扫码支付方法,“请扫码支付”。要求代理对象在后边加入“慢走,欢迎再来”字样。

   普通服务员具有让客户点餐方法“请看一下菜单”。要求代理对象在前边加入“您好,欢迎光临”字样。

   普通服务员具有让客户扫码支付方法,“请扫码支付”。要求代理对象在后边加入“请带好您的随身物品,慢走,欢迎再来”字样。

package com.xzit.model;

import com.xzit.adapter.UserService;
import org.springframework.stereotype.Component;

@Component
public class Saler{
    public void showMenu(){
        System.out.println("购买什么商品?");
    }
    public void pay(){
        System.out.println("请扫码支付。");
    }
}

 

package com.xzit.model;

import com.xzit.adapter.UserService;
import org.springframework.stereotype.Component;

@Component
public class Waiter{
    public void showMenu(){
        System.out.println("请看一下菜单。");
    }
    public void pay(){
        System.out.println("请扫码支付。");
    }
}
package com.xzit.util;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

/**
 * 通知(增强)
 */
//让当前的通知类作为spring容器中的组件
@Component
//使用AspectJ来实现AOP
@Aspect
public class MyAdvice {
    //前置通知
    @Before(value = "execution(* com.xzit.model.Saler.showMenu(..))")
    public void doBefore(){
        System.out.println("您好,欢迎光临");
        System.out.println("-----------------");
    }

    //最终通知 try finally
    @After(value = "execution(* com.xzit.model.Saler.pay(..))")
    public void doAfer(){
        System.out.println("慢走,欢迎再来");
        System.out.println("-----------------");
    }

    //前置通知
    @Before(value = "execution(* com.xzit.model.Waiter.showMenu(..))")
    public void doBefore2(){
        System.out.println("您好,欢迎光临");
        System.out.println("-----------------");
    }

    //最终通知 try finally
    @After(value = "execution(* com.xzit.model.Waiter.pay(..))")
    public void doAfer2(){
        System.out.println("请带好您的随身物品,慢走,欢迎再来");
        System.out.println("-----------------");
    }
}
package com.xzit.test;

import com.xzit.model.Saler;
import com.xzit.model.Waiter;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestAOP {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        Saler saler = context.getBean(Saler.class);
        Waiter waiter = context.getBean(Waiter.class);
        saler.showMenu();
        System.out.println("+++++++++++++++++++++++++++");
        saler.pay();
        System.out.println("+++++++++++++++++++++++++++");
        waiter.showMenu();
        System.out.println("+++++++++++++++++++++++++++");
        waiter.pay();
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springFramework</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>day_05_job</artifactId>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.3.16</version>
        </dependency>
    </dependencies>
</project>
<?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: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
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/aop
       https://www.springframework.org/schema/aop/spring-aop.xsd">
    <context:component-scan base-package="com.xzit"></context:component-scan>
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>

 

posted @ 2022-06-26 16:59  伊万  阅读(19)  评论(0编辑  收藏  举报