45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:ant和junit集成处理一个代理的例子是什么?

ant和junit集成处理一个代理的例子是什么?

2016-08-31 14:02:43 来源:www.45fan.com 【

ant和junit集成处理一个代理的例子是什么?

学习了几天的代理了,思路是有了,可是到用是还是有点含糊,不知道要什么时候要用方便,老师说

照着“猫”几个例子,以后就会熟悉的,今天就用学过的ant和junit的集成来“猫”了一个简单的代理的例子。

下面是build.xml文件

<?xml version="1.0" encoding="GB2312" ?>

<!--有中文注释时,一定要把encoding的值设置为"GB2312",不然会出错-->

<project name = "junit" default = "report">

<!--定义属性-->

<property name="src.java.dir" value="src/java" />

<property name="src.test.dir" value="src/test" />

<property name="classes.java.dir" value="classes/java" />

<property name="classes.test.dir" value="classes/test" />

<property name="report.dir" value="report" />

<property name="junit.tooljar.dir" value="C:/JAVA/Junit/junit3.8.1/junit.jar" />

<!--定义初始化任务,生成文件目录-->

<target name="init">

<mkdir dir="${classes.java.dir}" />

<mkdir dir="${classes.test.dir}" />

<mkdir dir="${report.dir}" />

</target>

<!--定义编译.java文件任务,依赖"init"任务-->

<target name="compileJava" depends="init">

<javac srcdir="${src.java.dir}/cn/itcast" destdir="${classes.java.dir}"/>

</target>

<!--定义编译测试文件,注意把tool.jar包加到classpath中,依赖"init"任务-->

<target name="compileTest" depends="init">

<javac srcdir="${src.test.dir}/cn/itcast" destdir="${classes.test.dir}">

<classpath>

<pathelement location="${classes.java.dir}" />

<pathelement location="${junit.tooljar.dir}" />

</classpath>

</javac>

</target>

<target name="compile" depends="compileJava,compileTest" />

<!--测试程序任务-->

<target name="test" depends="compile">

<junit>

<test name = "cn.itcast.ClientTest" todir = "${report.dir}" /><!--测试文件名-->

<formatter type = "brief" usefile = "false" /><!--输出格式-->

<formatter type = "xml" />

<classpath>

<pathelement location="${junit.tooljar.dir}" />

<pathelement location="${classes.test.dir}" />

<pathelement location="${classes.java.dir}" />

</classpath>

</junit>

</target>

<!--编写报告文件任务-->

<target name = "report" depends = "test">

<junitreport todir="${report.dir}">

<fileset dir="${report.dir}">

<include name="**/*Test*.java"/>

</fileset>

<report format="frames" todir="${report.dir}/html" />

</junitreport>

</target>

</project>

下面是实现的代理程序

一、接口的实现方案:

1)首先编写我们的业务接口(StudentInfoService.java):

public interface StudentInfoService{

void findInfo(String studentName);

}

及其实现类(StudentInfoServiceImpl.java):

public class StudentInfoServiceImpl implements StudentInfoService{

public void findInfo(String name){

System.out.println("你目前输入的名字是:"+name);

}

}

2)现在我们需要一个日志功能,在findInfo行为之前执行并记录其行为,那么我们就首先要拦截该行为。在实际执行的过程中用一个代理类来替我们完成。Java中为我们提供了实现动态代理类的方案:

1'处理拦截目的的类(MyHandler.java)

import org.apache.log4j.Logger;

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Proxy;

import java.lang.reflect.Method;

public class MyHandler implements InvocationHandler{

private Object proxyObj;

private static Logger log=Logger.getLogger(MyHandler.class);

public Object bind(Object obj){

this.proxyObj=obj;

return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),this);

}

public Object invoke(Object proxy,Method method,Object[] args) throws Throwable{

Object result=null;

try{

//请在这里插入代码,在方法前调用

log.info("调用log日志方法"+method.getName());

result=method.invoke(proxyObj,args); //原方法

//请在这里插入代码,方法后调用

}catch(Exception e){

e.printStackTrace();

}

return result;

}

}

2'我们实现一个工厂,为了方便我们使用该拦截类(AOPFactory.java):

public class AOPFactory{

private static Object getClassInstance(String clzName){

Object obj=null;

try{

Class cls=Class.forName(clzName);

obj=(Object)cls.newInstance();

}catch(ClassNotFoundException cnfe){

System.out.println("ClassNotFoundException:"+cnfe.getMessage());

}catch(Exception e){

e.printStackTrace();

}

return obj;

}

public static Object getAOPProxyedObject(String clzName){

Object proxy=null;

MyHandler handler=new MyHandler();

Object obj=getClassInstance(clzName);

if(obj!=null) {

proxy=handler.bind(obj);

}else{

System.out.println("Can't get the proxyobj");

//throw

}

return proxy;

}

}

3)基本的拦截与其工厂我们都实现了,现在测试(ClientTest.java):

public class ClientTest{

public static void main(String[] args){

StudentInfoService studentInfo=(StudentInfoService)AOPFactory.getAOPProxyedObject("StudentInfoServiceImpl");

studentInfo.findInfo("阿飞");

}

}

输出结果(看你的log4j设置):

[INFO]调用log日志方法findInfo

你目前输入的名字是:阿飞

这样我们需要的效果就出来了,业务处理自己在进行,但是我们实现了日志功能,而业务处理(StudentInfoService)根本不知道存在该行为的

 

本文地址:http://www.45fan.com/a/question/70287.html
Tags: 集成 JUnit ant
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部