网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  web开发中spring aop实际应用一例     
  文章作者:未知  文章来源:水木森林  
  查看:56次  录入:管理员--2007-11-17  
 
   在web开发中,用户对网页的访问权限检查是一个重要的环节。以strust为例,我们需要在action的excute方法中编写相关的代码(一般是调用基类的函数),也很显然,在每个action中这是一种重复劳动。
如果我们在excute运行之前,能够自动去调用基类的权限检查函数,这无疑是个好的解决办法。aop就为我们提供了这样一种解决方法。

  下面以一个简化的实例介绍实现的办法。

  首先我们做一个接口:

public interface checkinterface {
  public abstract void check(string name);
  public abstract void excute(string name);
}


  再做一个基类:

public abstract class baseclass implements checkinterface {
public baseclass() {
}
public void check(string name){
if (name.equals("supervisor"))
system.out.println("check pass!!");
else {
system.out.println("no access privilege! please do sth. else!");
}
}
}

  再做一个测试类:

public class excuteclass extends baseclass {
public excuteclass() {
}

public void excute(string name){
system.out.println("excute here!"+name);
}
}


  好了,下面做一个通知类(advice):

import org.springframework.aop.methodbeforeadvice;
import java.lang.reflect.method;
import org.apache.log4j.logger;

public class beforeadvisor implements methodbeforeadvice {
private static logger logger=logger.getlogger(beforeadvisor.class);
public void before(method m, object[] args, object target) throws throwable {
if (target instanceof checkinterface){
logger.debug("is instanceof checkinterface!!!");
checkinterface ci=(checkinterface)target;
ci.check((string)args[0]);
}
}
}

  其中重要的before方法的参数:object target传入的通知的对象(即测试类的接口),method m, object[] args分别是该对象被调用的方法和参数。我们再来作spring bean定义xml文件:
<?xml version="1.0" encoding="utf-8"?>
<!doctype beans public "-//spring//dtd bean//en" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<description>spring quick start</description>
<bean id="myadvisor" class="com.wysm.netstar.test.springaop.beforeadvisor"/>

<bean id="mypointcutadvisor2" class="org.springframework.aop.support.regexpmethodpointcutadvisor">
<property name="advice">
<ref local="myadvisor" />
</property>
<property name="patterns">
<list>
<value>.*excute.*</value>
</list>
</property>
</bean>

<bean id="checkinterface" class="com.wysm.netstar.test.springaop.excuteclass"/>

<bean id="mycheckclass" class="org.springframework.aop.framework.proxyfactorybean">
<property name="proxyinterfaces">
<value>com.wysm.netstar.test.springaop.checkinterface</value>
</property>
<property name="target">
<ref local="checkinterface" />
</property>
<property name="interceptornames">
<value>mypointcutadvisor2</value>
</property>
</bean>

</beans>

  这个定义文件指明了excuteclass为监视对象,它的excute方法被执行的时候,beforeadvisor将被调用。

  最后是测试类:

import junit.framework.testcase;
import org.springframework.context.applicationcontext;
import org.springframework.context.support.filesystemxmlapplicationcontext;

public class springtestcase2 extends testcase {
checkinterface test=null;

    protected void setup() throws exception {
super.setup();
applicationcontext ctx=new filesystemxmlapplicationcontext("src/com/wysm/netstar/test/springaop/aoptest.xml");
test = (checkinterface) ctx.getbean("mycheckclass");
}

    protected void teardown() throws exception {
super.teardown();
}
public void testexcute(){
test.excute("supervisor");
}
}

 
 
上一篇: spring与weblogic server的集成    下一篇: 我为什么没有使用spring
  相关文档
怎样用java的加密机制来保护你的数据 11-17
用软引用阻止内存泄漏 11-17
运用j2ee创建灵活易扩展的企业应用程序探讨 11-17
心得总结:常用数据库jdbc连接写法 11-17
技巧:利于threadlocal模式管理session 11-16
关于 javawebframework 的选择 11-17
新建eclipse(roller2.1.1)工程到发布成功 11-17
java rmi and .net remoting 11-17
java 中 this 的使用 11-17
(转贴)java的数据库应用 11-17
《实时uml与rational rose realtime建模案例剖析》目录 11-17
java用户界面编程指南(中文)2 11-17
使用quick在java对象和xml之间进行转换 11-17
jbuilder 中的 uml 工具 11-17
jsr 198最终草案提交 统一ide插件标准 11-17
java api之交互操作性 11-16
怎样用servletrunner来运行servlet 11-17
java socket编程(三) 11-17
实战jboss?d?d教你写第一个ejb 11-16
web环境hibernate数据源问题补充 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息