javaEE之-------Spring中的aspectJ的应用
来源:互联网 发布:复旦cpu卡算法 编辑:程序博客网 时间:2024/06/05 09:44
采用aspectJ可以且整个项目里面的需求。
如数据库的事物处理等
演示实例为主:
和之前一样,先采用java手动写的方式。。
切面技术 = 通知 + 切点
<span style="font-size:18px;">@Testpublic void test1(){//1,获得代理工厂ProxyFactory factory = new ProxyFactory(new Person());//2,切点AspectJExpressionPointcut cut = new AspectJExpressionPointcut();//以下主要是讲aspectj的切点语法,如果把<bean>配置在xml中且使用自动代理,那么所有的bean都会按下面的匹配原则被切//cut.setExpression("execution( void cn.hncu.aop.Person.run() )");//指定拦:Person类中的空参 run()方法//cut.setExpression("execution( * cn.hncu.aop.Person.*n() )");//拦:方法名以“n”结尾且空参的方法//cut.setExpression("execution( void cn.hncu.aop.Person.*() )");//拦:返回值为void且空参的方法//cut.setExpression("execution( * cn.hncu.aop.Person.*(*) )");//拦:参数个数为1个的方法//cut.setExpression("execution( * cn.hncu.aop.Person.*(*,*) )");//拦:参数个数为2个的方法//cut.setExpression("execution( * cn.hncu.aop.Person.*(*,..) )");//拦:参数个数>=1个的方法//cut.setExpression("execution( * cn.hncu.aop.Person.*(..) )");//拦:参数任意,返回类型任意//cut.setExpression("execution( * cn.hncu.aop.Person.*(String,..) )");//拦:第一个参数必须是String型,其它参数任意。返回类型任意//cut.setExpression("execution( * cn.hncu..*(..) )");//“cn.hncu..”中的“..”指的是cn.hncu下的任意目录(无论有多深)cut.setExpression("execution( * cn.aop..*(..))");//通知Advice advice =new MethodInterceptor() {@Overridepublic Object invoke(MethodInvocation inv) throws Throwable {System.out.println("采用aspectj方法之前拦截");Object obj=inv.proceed();System.out.println("之后拦截");return obj;}};Advisor advisor =new DefaultPointcutAdvisor(cut, advice);factory.addAdvisor(advisor);Person p =(Person) factory.getProxy();p.run();p.say();}</span>里面含有部分正则表达式。。
然后采用配置文件的方式(这里只是简单的测试)
<bean id="person" class="cn.aop.Person"></bean><bean id="stud" class="cn.aop.Student"></bean> <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"></bean><bean id="advisor" class="org.springframework.aop.aspectj.AspectJExpressionPointcutAdvisor"> <property name="expression" value="execution( * cn.aop.Person.*(..) )" /> <property name="advice" ><bean class="cn.aop.demo1.Around" /> </property></bean>
从之前我们可以看到修改了下切面的包
<bean id="advisor" class="org.springframework.aop.aspectj.AspectJExpressionPointcutAdvisor">
具体要拦截什么,主要配置
<property name="expression" value="execution( * cn.aop.Person.*(..) )" />
接口的实现类(简单的测试)
package cn.aop.demo1;import org.aopalliance.intercept.MethodInterceptor;import org.aopalliance.intercept.MethodInvocation;public class Around implements MethodInterceptor {@Overridepublic Object invoke(MethodInvocation method) throws Throwable {System.out.println("开始拦截了");Object obj= method.proceed();System.out.println("拦截返回啦");return obj;}}
测试类:
@Testpublic void test(){ApplicationContext ctx =new ClassPathXmlApplicationContext("cn/aop/aspectj/aspectj.xml");Person p=ctx.getBean(Person.class);p.run();p.say();}
1 0
- javaEE之-------Spring中的aspectJ的应用
- javaEE之------Spring-----》 AspectJ注解
- Spring AOP & AspectJ之基础应用
- Spring应用aspectj类库
- spring中的AOP与AspectJ的区别?
- javaee之Spring的练习
- javaee之Spring的整合
- spring中的aspectJ表达式
- Spring AOP之AspectJ
- Spring AOP之AspectJ
- aspectj 之JoinPoint应用
- spring AspectJ的Execution
- Spring---AspectJ的AOP
- spring的aspectj简介
- Spring----AspectJ的AOP
- spring-AspectJ的用法
- javaee之Spring的AOP案例
- JavaEE中的session应用
- Xcode和模拟器的清除缓存
- 7、单例设计模式
- 分享周鸿祎的《如何建立一个“铁打的营盘”》
- 继承Binder类绑定服务显示时间
- boost库中 不同版本载入lib的方式
- javaEE之-------Spring中的aspectJ的应用
- 考研后的Java温习之I/O
- Android笔记--对Content的理解和使用和Application的用途、生命周期
- WMware11下安装Fedora22详细图文
- The Django Book 2.0--中文版--第四章 模板
- 23 判断扑克牌的顺子
- 位运算
- 【UE4官方文档翻译】Unreal Engine 4 For Unity Developers (针对Unity开发者的UE4)
- XGBoost:二分类问题