zoukankan      html  css  js  c++  java
  • spring中aop的前值增强

    Spring AOP的几个概念

    1.切面(Aspect):切面就是一个关注点的模块化,如事务管理、日志管理、权限管理等;
    2.连接点(Joinpoint):程序执行时的某个特定的点,在Spring中就是一个方法的执行;
    3.通知(Advice):通知就是在切面的某个连接点上执行的操作,也就是事务管理、日志管理等;
    4.切入点(Pointcut):切入点就是描述某一类选定的连接点,也就是指定某一类要织入通知的方法;
    5.目标对象(Target):就是被AOP动态代理的目标对象;

    spring中包括前置增强、后置增强、和环绕增强等,而前置增强,我们可以讨论一下他们的使用:

    我的代码如下:

    定义一个接口IHello.java

    package Spring;

    public interface IHello { //定义一个接口
    public void hello(String name);

    }

    创建一个类实现接口HelloSpacker.java

    package Spring;

    public class HelloSpacker implements IHello{

           //继承该接口,并且实现接口的方法

    @Override
    public void hello(String name){
    System.out.println("hello,"+name);
    }
    }

    创建一个类实现前值增强LogBeforeAdvice.java

    package Spring;

    import java.lang.reflect.Method;
    import java.util.logging.Level;
    import java.util.logging.Logger;

    import org.springframework.aop.MethodBeforeAdvice;

    public class LogBeforeAdvice implements MethodBeforeAdvice{
    //继承MethodBeforeAdvice,前值增强设计为一个独立的类
    private Logger logger=Logger.getLogger(this.getClass().getName());
    @Override
    public void before(Method method,Object[] arg, Object target) //前置增强实现的方法
    throws Throwable {
    logger.log(Level.INFO,"method start..."+method);
    } //前置增强
    }

    配置文件spring.xml

                    

    测试类SpringDemo.java

    package Spring;

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

    public class SpringDemo {
    public static void main(String[] args) {
    @SuppressWarnings("resource")
    ApplicationContext context=new ClassPathXmlApplicationContext("Spring.xml");
    IHello helloProxy=(IHello)context.getBean("helloProxy");
    helloProxy.hello("Justin!!!");

    }
    }

    后置增强的代码,实现AfterReturningAdvice接口

    public class LogAfterAdvice implements AfterReturningAdvice{
    Logger logger=Logger.getLogger(this.getClass().getName());

     

    @Override
    public void afterReturning(Object object, Method method,Object[] target,
    Object args) throws Throwable {
    logger.log(Level.INFO,"Methdo ends..."+method);

    }
    }

     测试代码结果

     After Throwing Advice:基于XML Schema

    package SpringMVC;

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

    import Spring.IHello;

    public class SpringDemo{
    public static void main(String[] args) {
    @SuppressWarnings("resource")
    ApplicationContext context=new ClassPathXmlApplicationContext("bean-config.xml");
    IHello helloSpeacker=(IHello)context.getBean("helloSpeacker");
    try{
    helloSpeacker.hello("Justin!!!!!!!!!!!!!!!");
    }catch(Exception e){
    e.printStackTrace();
    }
    }

    }

     

     

    没有停止的脚步,只有倒下去的脚步
  • 相关阅读:
    ios中静态库的创建和使用、制作通用静态库(Cocoa Touch Static Library)
    ios-字符串替换-正则表达式-例子
    Android 中自定义仪表盘
    Android中控件AutoCompleteTextView的使用方法和一些属性
    用代码如何检测一个android程序是否在运行
    android 报错: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/animation/AnimatorCompatHelper;
    android中Zing二维码扫描,二维码生成
    gps数据上传防止android系统休眠
    Android中判断service是否在运行
    BottomSheetDialogFragment 如何设置高度和禁止滑动
  • 原文地址:https://www.cnblogs.com/hkMblogs/p/10799494.html
Copyright © 2011-2022 走看看