定义通知器 ‹aop∶advisor›

Exisi 2022-11-28 08:38:32
Categories: Tags:


语法

<aop:advisor advice-ref="事务类beanid" pointcut-ref="切入点id"/>

示例

  1. 首先,我们定义一个接口SleepAdvisor和这个接口的实现SleepImplAdvisor

public interface SleepAdvisor{

    public void sleep(String name);

}

 

public class SleepImplAdvisor implements SleepAdvisor{

    private String name;

    @Override

    public String sleep(String name)    {

        System.out.println("I'm sleeping!");

        return "sleep";

    }

    public String getName()    {

        return name;

    }

    public void setName(String name)    {

        this.name = name;

    }

}

 

  1. 创建一个通知类

public class AopAdvisorHelper implements MethodBeforeAdvice, AfterReturningAdvice{

    @Override

    public void before(Method method, Object[] args, Object target) throws Throwable{

        System.out.println("" + target + "执行了" + method.getName() + "方法。");

        //数据库做一个插入操作

    }

 

    /**

    * returnValue 方法返回值

    * method 执行的方法

    * args 执行方法的参数

    * target 执行的类

    */

    @Override

    public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable{

        System.out.println("" + target + "执行了" + method.getName() + "方法。");

    }

}

 

  1. 配置通知器

<bean id="aopAdvisorHelper" class="com.exi.aop.advisor.AopAdvisorHelper"></bean>

<!-- aop配置 -->

<aop:config>

  <aop:pointcut id="sleepPointcut" expression="execution(* com.exi.aop.advisor.*.*(..))" />

  <aop:advisor pointcut-ref="sleepPointcut" advice-ref="aopAdvisorHelper" />

</aop:config>

 

  1. 测试类

@Test

public class BeanTest{
    public static void main(String args[]) throws Exception{

//aop-advisor实现aop拦截

        ApplicationContext context = new ClassPathXmlApplicationContext("spring-aop.xml");

        ISleepAdvisorable sleeper = (ISleepAdvisorable) context.getBean("human");

        sleeper.sleep("human");

        System.out.println("=======================================");

        ICarAdvisorable car = (ICarAdvisorable) context.getBean("carableAdvisorImpl");

        car.byCar();

   }

}

 

 

来自 <https://www.cnblogs.com/hejj-bk/p/11413614.html> ​​​​​​​