028-86922220

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

SpringAop使用-创新互联

文章目录

创新互联公司专注于蔡甸企业网站建设,自适应网站建设,商城网站制作。蔡甸网站建设公司,为蔡甸等地区提供建站服务。全流程按需定制,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务Spring Aop

基于AspectJ和基于schema的Aop命名的使用

在main方法中写上 System.getProperties().put(“sun.misc.ProxyGenerator.saveGeneratedFiles”, “true”);可以在com.sun.proxy路径下看到生成的代理类class

基本概念简单使用

目标对象的接口以及实现

public interface Hello {void say();
    String tell(String mes);
}

public class HelloImpl implements Hello {@Override
    public void say() {System.out.println("hi");
    }

    @Override
    public String tell(String mes) {System.out.println(mes);
        return mes;
    }
}

实现一个切面

@Aspect
public class BeformAspect {@Before("execution(* say(..))")
    public void print()
    {System.out.println("before");
    }
}

使用

ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
Hello hello = (Hello)applicationContext.getBean("hello");
hello.say();
AspectJ基本语法 切点表达式

在这里插入图片描述

在函数中使用通配符
符号作用
*匹配任意字符,但只能匹配上下文种的一个
…(两个点)匹配任意字符可以匹配上下文多个,但在表示类的时候,必须和*联合使用,表示入参单独使用
+必须跟在类名后,代表类的子类,包括自己

在这里插入图片描述

逻辑运算符

在这里插入图片描述

不同的增强类型
注解参数作用
@Before (前置)value定义切点
argNames可以获得目标对象的参数,参数名要和目标的参数名一致,多个已逗号隔开
@AfterReturning (后置)value定义切点
pointcut显示定义将覆盖value,和value同义
returning将目标的返回值绑定给增强方法
argNames同前面一样
@Around (环绕)value定义切点
argNames同前面一样
@AfterThrowing (异常)value定义切点
pointcut同前面一样
throwing将抛出的异常绑定到方法中
argNames同前面一样
@After (不管异常还是正常退出都会执行)value定义切点
argNames同前面一样
@DeclareParents (引介增强)value定义切点
defaultImpl默认的接口实现类
引介方法例子

比较特殊不同于其他增强类型的使用,
将HelloImpl融入SellerImpl类

public interface Hello {void say();
    String tell(String mes);
}

public class HelloImpl implements Hello {@Override
    public void say() {System.out.println("hi");
    }

    @Override
    public String tell(String mes) {System.out.println(mes);
        return mes;
    }
}

public interface Seller {String sell(String goods);
}

public class SellerImpl implements Seller{@Override
    public String sell(String goods) {System.out.println(goods);
        return null;
    }
}

介引切面

@Aspect
public class BeformAspect {@DeclareParents(value = "AspectJ.HelloImpl",defaultImpl = SellerImpl.class)
    public Seller seller;

}

配置文件

使用

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
        //可以将HelloImpl强转为Seller
        Seller hello = (Seller)applicationContext.getBean("hello");
        System.out.println(hello);
切点函数详解 @annotation
@Before("@annotation(AspectJ.Mytest)")

被注解标记的方法会执行切面注入

execution 通过方法签名定义

匹配 所有public的方法(其他修饰符不行),第一个*代表返回值 第二个代表方法名,(…)表示任意入参

@Before("execution(public * *(..))")

任意返回值,任意参数,方法名字以ll结尾的方法

@Before("execution(* *ll(..))")
通过类来定义

匹配Hello接口所有实现类,第一个*为返回值。(只包括接口定义的方法)

@Before("execution(* AspectJ.Hello.*(..))")

匹配Hello接口所有实现类,第一个*为返回值。(包括子类里不是接口的方法)

@Before("execution(* AspectJ.Hello+.*(..))")
通过类包来定义

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


新闻名称:SpringAop使用-创新互联
新闻来源:http://www.tsicrk.com/article/dheoje.html

其他资讯

让你的专属顾问为你服务

0.6724s