JAVA网页编程之WEB开辟中Spring AOP实践使用一例
那这个对象有什么意义?现在很多用javabean的人就不能保证对象有完整的意义,不成熟的使用模式等导致代码疯狂增长,调试维护的时间要得多得多。在说性能之前,先说说你这个比较的来历。据说微软为了证明。net比java好。web 在WEB开辟中,用户对网页的会见权限反省是一个主要的环节。以STRUST为例,我们必要在Action的excute办法中编写相干的代码(通常为挪用基类的函数),也很明显,在每一个Action中这是一种反复休息。假如我们在excute运转之前,可以主动往挪用基类的权限反省函数,这无疑是个好的办理举措。AOP就为我们供应了如许一种办理办法。
上面以一个简化的实例先容完成的举措。
起首我们做一个接口:
publicinterfaceCheckInterface{
publicabstractvoidcheck(Stringname);
publicabstractvoidexcute(Stringname);
}
再做一个基类:
publicabstractclassBaseClassimplementsCheckInterface{
publicBaseClass(){
}
publicvoidcheck(Stringname){
if(name.equals("supervisor"))
System.out.println("CheckPass!!");
else{
System.out.println("Noaccessprivilege!Pleasedosth.else!");
}
}
}
再做一个测试类:
publicclassExcuteClassextendsBaseClass{
publicExcuteClass(){
}
publicvoidexcute(Stringname){
System.out.println("Excutehere!"+name);
}
}
好了,上面做一个关照类(Advice):
importorg.springframework.aop.MethodBeforeAdvice;
importjava.lang.reflect.Method;
importorg.apache.log4j.Logger;
publicclassBeforeAdvisorimplementsMethodBeforeAdvice{
privatestaticLoggerlogger=Logger.getLogger(BeforeAdvisor.class);
publicvoidbefore(Methodm,Object[]args,Objecttarget)throwsThrowable{
if(targetinstanceofCheckInterface){
logger.debug("IsInstanceofCheckInterface!!!");
CheckInterfaceci=(CheckInterface)target;
ci.check((String)args);
}
}
}
个中主要的before办法的参数:Objecttarget传进的关照的对象(即测试类的接口),Methodm,Object[]args分离是该对象被挪用的办法和参数。我们再来作springbean界说xml文件:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd>
<beans>
<description>SpringQuickStart</description>
<beanid="MyAdvisor"class="com.wysm.netstar.test.springaop.BeforeAdvisor"/>
<beanid="myPointcutAdvisor2"class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<propertyname="advice">
<reflocal="MyAdvisor"/>
</property>
<propertyname="patterns">
<list>
<value>.*excute.*</value>
</list>
</property>
</bean>
<beanid="checkInterface"class="com.wysm.netstar.test.springaop.ExcuteClass"/>
<beanid="myCheckClass"class="org.springframework.aop.framework.ProxyFactoryBean">
<propertyname="proxyInterfaces">
<value>com.wysm.netstar.test.springaop.CheckInterface</value>
</property>
<propertyname="target">
<reflocal="checkInterface"/>
</property>
<propertyname="interceptorNames">
<value>myPointcutAdvisor2</value>
</property>
</bean>
</beans>
这个界说文件指了然ExcuteClass为监督对象,它的excute办法被实行的时分,BeforeAdvisor将被挪用。
最初是测试类:
importjunit.framework.TestCase;
importorg.springframework.context.ApplicationContext;
importorg.springframework.context.support.FileSystemXmlApplicationContext;
publicclassSpringTestCase2extendsTestCase{
CheckInterfacetest=null;
protectedvoidsetUp()throwsException{
super.setUp();
ApplicationContextctx=newFileSystemXmlApplicationContext("src/com/wysm/netstar/test/springaop/aoptest.xml");
test=(CheckInterface)ctx.getBean("myCheckClass");
}
protectedvoidtearDown()throwsException{
super.tearDown();
}
publicvoidtestExcute(){
test.excute("supervisor");
}
}
令人可喜的是java现在已经开源了,所以我想我上述的想法也许有一天会实现,因为java一直都是不断创新的语言,每次创新都会给我们惊喜,这也是我喜欢java的一个原因。 自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想) Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧! 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
页:
[1]