|
下载jboss-aop文件后(jboss 3.2.1 还没有集成AOP功能,4.0已经集成在一起了),同时最好安装一个ant工具,在docs\examples中新建test_aop目录。
参照examples中的其它例子(constructor-execution构造器拦截, method-execution方法拦截等),建立自己的例子,build.xml文件基本可以不动(由ant调用,可能需要增加里面的classpath部分,例如加入dwr.jar,才能编译与dwr相关的应用类, 以及javax.servlet.jar等等其他jar),主要是通过改变 jboss-aop.xml的配置来体验 拦截器的效果。 可以直接在本路径cmd下执行ant命令,默认通过Driver来驱动例子。
jboss自带的拦截器例子中 ,大都直接显示被拦截对象名字、方法名字、field的名字、构造函数名字等, 但是实际应用中我们不仅需要方法的名字,可能更需要被拦截方法的参数列表。 可以通过下面方式获得。
被拦截对象的方法
public boolean test(String username, String passwd) {
//正常的业务处理
return true;
}
//拦截器
public Object invoke(Invocation invocation) throws Throwable
{
try
{
MethodInvocation mi = (MethodInvocation)invocation;
//System.out.println("<<< Entering MethodInterceptor for: " + mi.getMethod().toString());
Object[] obj = mi.getArguments(); //取得参数对象
System.out.println("username=" + obj[0].toString());
System.out.println("passwd=" + obj[1].toString());
return invocation.invokeNext();
}
finally
{
System.out.println(">>> Leaving MethodInterceptor");
}
}
脱离jboss环境单独应用AOP是可能的, 例如可以部署到tomcat下面。
aop应用中, 被拦截对象的编译不能直接使用javac进行, 而应该使用ant进行编译,除了被拦截对象的.class文件后, jboss AOP还会根据jboss-aop.xml中的配置生成相应的其他class文件(这些类的名字可能非常怪异), 以及拦截器本身class文件。
要想应用在tomcat下面最主要的就是让 aop组件能够找到jboss-aop.xml文件的位置。这需要设置系统变量“jboss.aop.path”。
假设web应用的名字叫作"test_dwr", 可以将jboss-aop.xml copy在 webapps\test_dwr\WEB-INF下面,然后修改tomcat的启动文件, 在catalina.bat文件中,找到" %_EXECJAVA% " 的位置(有多处), 然后在其后面的参数中加入 " -Djboss.aop.path=../webapps\test_dwr\WEB-INF\jboss-aop.xml "即可。 注意里面的test_dwr要根据情况改变。
问题:
在和dwr进行配合使用时候, 对于 方法 的拦截是正常的, 但是 对于构造函数的拦截器没有得到及时的“植入”。 问题可能在于dwr创建对象的方式。还需要进一步研究。 |
|
|
|
|
|
|