AspectJ给类的属性打桩,进行替换。
这个东西必须写个博客记一下了,一方面是防止以后忘记,一方面也反思一下自己的固执。
在我们的代码中,通常会有一些配置文件的路径写死在代码里面。比如
public class ConfigPath
{
private static String CONF_FILE = "/dir/xxx/ppp.propetries";
}
在做UT的时候,一般测试环境和真实的生产环境是不一样的,配置文件的路径肯定也是不一样的,这样在测试的时候,必须要把这个路径替换掉,而且不能影响系统原来的代码。
在上一家公司的时候,做过这样的事情,不过在那个公司都是前面的大牛写过这样的东西,自己依葫芦画瓢,照着写一份就好了。
记得当时是在aj文件中,fild = "xxxxx"; 这样的形式来替换的,但是前面的AspectJ关键字记不住了(其实不是这样的,自己记错了,源文件中才是这种形式,aj中还是用的pointcut)。自己固执的认为就是这个形式的,在网上查了很多Aj的资料,都没找到这种形式打桩的(其实现在网上Aj的资料也不多)。
在此还是要感谢一下表哥和劢神,最后还是他们给我说的怎么弄。
要想替换掉上面那个ConfigPath类中的 CONF_FILE 属性的值, 应该在AJ文件中这样写一个切面:
pointcut setConfFile(String fileName): set(private static String ConfigPath.CONF_FILE)&&args(fileName); // set()里面的private static修饰符也可以不要
around(String fileName):setConfFile(fileName)
{
proceed("这里是UT里面的希望替换的新内容");
}
这种方法貌似还是不能给final的变量打桩,还需要继续研究
AspectJ给类的属性打桩,进行替换。的更多相关文章
- Objective-C通过联合存储为类增加属性及原理解析
		联合存储实现方式及底层原理解析 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory_tjsd/article/details/9347981 转载请注明出处 ... 
- How to: Handle Renamings and Deletions of Business Classes and their Properties 如何:处理业务类及其属性的重命名和删除
		When developing an XAF application, you may be required to rename a persistent class or property due ... 
- IL接口和类的属性
		上一篇文章学习了IL的入门,接下来我们再通过两个例子来了解下类的属性.构造函数以及接口的使用 一.类的属性.构造函数 1.先看下我们要构建的类的C#代码,然后再进行IL的实现,示例代码如下: [Ser ... 
- runtime-给系统已有类添加属性
		在没有接触runtime之前,我们接触到的能给类进行扩展的方法有类目(category)和延展(extension)两种.类目(category)可以给系统已有类添加扩展方法但是不能添加属性,并且被添 ... 
- iOS开发之遍历Model类的属性并完善使用Runtime给Model类赋值
		在上篇博客<iOS开发之使用Runtime给Model类赋值>中介绍了如何使用运行时在实体类的基类中添加给实体类的属性赋值的方法,这个方法的前提是字典的Key必须和实体类的Property ... 
- Python笔记(4)类__属性与描述符
		部分参考自:http://www.geekfan.net/7862/ 新式类与经典类 2和3不一样,3都是新式类. 新式类和经典类的区别: class A: #classic class " ... 
- 007-Scala类的属性和对象私有字段实战详解
		007-Scala类的属性和对象私有字段实战详解 Scala类的使用实战 变量里的类必须赋初值 def函数时如果没参数可不带括号 2.不需要加Public声明 getter与setter实战 gett ... 
- 遍历一个类的属性--并转换为Dictionary类型
		参考地址...http://www.cnblogs.com/xwgli/p/3306297.html 记录点滴...以前很少用泛型...HaHa... /// <summary> /// ... 
- Python基础:新式类的属性访问
		一.概述 二.准备工作 1.讨论对象 2.名词解释 三.实例绑定的属性访问 1.获取属性 一般规则 参考源码 示例验证 2.设置属性 一般规则 参考源码 示例验证 3.删除属性 一般规则 参考源码 示 ... 
随机推荐
- 使用mysql_query()方法操纵数据库以及综合实例
			1.利用insert 语句添加记录 <? require('conn.php'); mysql_query( "insert into lyb ( title, content, au ... 
- CakePHP 2.x 升级3.0
			CakePHP 2.x => 3.x 升级手顺 一.Controller层 1.find('list') 原2.x中该方法通过指定option中的'fields'来实现key=>value ... 
- MVC3 分页Helper
			利用mvc3实现分页效果.效果图如下: 直接拷代码: 首页添加一个Helper的类(命名空间为System.Web.Mvc;). public static HtmlString ShowPageNa ... 
- 使用Unity开发HoloLens应用
			https://developer.microsoft.com/en-us/windows/holographic/install_the_tools 导读:开发者们在陆续收到HoloLens开发者版 ... 
- WEB Application Development Integrator  : 应用设置
			1.1. 系统安装 应用 Oracle EBS WEB Application Development Integrator WEB ADI在Oracle EBS 11.5.10.* 版本 ... 
- 1.9  需求订单导入MDS
			1.9 需求订单导入MDS 1.9.1 业务方案描述 将”需求订单维护表”中完成调整维护的需求订单导入系统标准MDS中,使之驱动对应的物料需求计划(MRP)的运行. 1.9.2 ... 
- Linux下最快速共享目录的方法
			Linux下最快速共享目录的方法 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 搭建FTP,或者是搭建网络文件系统,这 ... 
- 嵌入式davinci电路元素基础和PWM模块
			1,DAC_OUT和DAC_OUTB是AD9912输出的差分信号. 2,电容器储存电荷的能力,常用的单位是F.uF.nF.pFUF大了好还是UF小了好,要根据电路自身需要而设计, 要看电路滤波是在高频 ... 
- C语言入门(14)——结构体
			整数.字符.布尔值.浮点数这些数据类型都具有单一的值,这些可称为基本数据类型.但字符串是一个例外,它由很多字符组成,像这种由基本类型组成的数据类型称为复合数据类型,正如表达式和语句有组合规则一样,由基 ... 
- Linux的正常关机
			Azure上的 IaaS 虚拟机可使用多种方式关闭,例如通过 Azure 管理门户.Azure Powershell cmdlet 或 CLI 工具,甚至还可以由交互式登录的用户关闭.Azure 平台 ... 
