1. 云栖社区>
  2. 技术文集>
  3. 列表>
  4. 正文

Spring Aop 实现函数内部增强__函数

作者:用户 来源:互联网 时间:2018-05-29 13:40:52

hadoop

Spring Aop 实现函数内部增强__函数 - 摘要: 本文讲的是Spring Aop 实现函数内部增强__函数, Spring Aop 的一个切面包括 1.增强类型(函数调用前、后,抛出异常和函数调用前后) 2.增强的业务逻辑 3.连接点 而Spring Aop 只支持方法的连接点,当我想在方法内部织入增强时,可以有两种方式

Spring Aop 的一个切面包括 1.增强类型(函数调用前、后,抛出异常和函数调用前后) 2.增强的业务逻辑 3.连接点

而Spring Aop 只支持方法的连接点,当我想在方法内部织入增强时,可以有两种方式:

1.比如一个函数A有a,b,c三种功能,我想在b前也即函数中间织入一个增强,那么可以把b单独拿出来写成一个独立的函数,然后在A中调用b,这样就可以b前、后织入切面了。

2.一般函数只有一种功能,难以进行拆分。例如在函数中间有一个变量a,现在我想在这个变量后织入增强,同时把该变量传递过去,那么我可以在该类中定义一个空函数(什么也不做)作为目标函数,然后把变量a赋给该函数的形参,再在该函数织入切面,那么这个切面可以获得目标函数传入的参数即a。主函数调用这个空函数即可。

例如在我的函数中,我想把变量getCount与sumCount传递给切面进行处理(假设切面的功能就是打印变量)

html">public void run() {
		while (true) {
			Query query = session.createQuery("from VehicleInfo");
			query.setFirstResult(getCount * getNumOneTime);
			query.setMaxResults(getNumOneTime);
			List<VehicleInfo> infoList = query.list();
			getCount++;
			sumCount += infoList.size();
			//在这儿织入切面,并将变量传递给切面
			}
		}
我可以定义一个空函数,什么也不做

public void transferToWeb(int getCount,int sumCount) {}

然后再这个函数前或者后织入切面,再在run函数中调用这个空函数
getCount++;
sumCount += infoList.size();
transferToWeb(getCount,sumCount);

但是需要注意的是Aop是需要代理的,只有当代理类直接调用transferToWeb增强才会织入,而通过run函数间接调用transferToWeb,因为代理是不会传递的,所以增强还是不会织入,所以这儿必须强制获得该类的代理,例如我这是的类名字叫做Convert,那么将代码改成

sumCount += infoList.size();
//获取代理
((Convert)AopContext.currentProxy()).transferToWeb(getCount,sumCount);
增强即可织入。

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有 的相关内容,欢迎继续使用右上角搜索按钮进行搜索hadoop ,以便于您获取更多的相关知识。

java类的问题哈哈哈哈-hibernate和spring怎么整合的

问题描述 hibernate和spring怎么整合的 hibernate和spring添加切面配置是如何搞得,请各位大神指点我,谢谢啦 解决方案 http://wenku.baidu.com/link?url=JWek_B9UHh9ZkM1l80KvA1nmq6ePWUTq94zbWQVTe_2rL89R-pWdR3y...

实例讲解Java的Spring框架中的AOP实现_java

...这些关注点术语通常称作 横切(crosscutting) 关注点。) Spring的一个关键的组件就是 AOP框架。 尽管如此,Spring IoC容器并不依赖于AOP,这意味着你可以自由选择是否使用AOP,AOP提供强大的中间件解决方案,这使得Spring IoC容器更...

探秘Spring AOP (一) 初始化认识

探秘Spring AOP 1、走进面向前面编程 2、什么是AOP一、是一种编程范式,不是编程语言二、解决特定问题,不能解决所有问题三、是OOP的补充,不是替代3、AOP的初衷一、解决Don't Repeat YonrselfDRY原则,代码重复性问题 二、解决Separat...

Spring 事务管理高级应用难点剖析: 第 1 部分

概述 Spring 最成功,最吸引人的地方莫过于轻量级的声明式事务管理,仅此一点,它就宣告了重量级 EJB 容器的覆灭。Spring 声明式事务管理将开发者从繁复的事务管理代码中解脱出来,专注于业务逻辑的开发上,这是一件可以被...

SpringAOP在项目中的简单应用

 SpringAOP在项目中的简单应用一、前言项目背景由于公司的机房到期,需要做应用迁移(包括数据库),割接到云平台。但是又不能进行一次性割接,需要分三个阶段:第一阶段割接2个地市,第二阶段再割接9个地市,第三阶段...

前三篇
后三篇