ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:250.68KB ,
资源ID:19889602      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19889602.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Spring入门Word格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Spring入门Word格式.docx

1、 Properties中配置好Java Build Path:我们实现一个管理用户的业务Bean。首先定义一个ServiceBean接口,声明一些业务方法:/* Copyright_2006, Liao Xuefeng* Created on 2006-3-9* For more information, please visit: */package com.crackj2ee.example.spring;* Interface of service facade.* * author Xuefengpublic interface ServiceBean void addUser(Str

2、ing username, String password); void deleteUser(String username); boolean findUser(String username); String getPassword(String username);然后在MyServiceBean中实现接口:import java.util.*;public class MyServiceBean implements ServiceBean private String dir; private Map map = new HashMap(); public void setUser

3、Dir(String dir) this.dir = dir; System.out.println(Set user dir to: + dir); public void addUser(String username, String password) if(!map.containsKey(username) map.put(username, password); else throw new RuntimeException(User already exist.); public void deleteUser(String username) if(map.remove(use

4、rname)=null)User not exist. public boolean findUser(String username) return map.containsKey(username); public String getPassword(String username) return (String)map.get(username);为了简化逻辑,我们使用一个Map保存用户名和口令。现在,我们已经有了一个业务Bean。要测试它非常容易,因为到目前为止,我们还没有涉及到Spring容器,也没有涉及到任何Web容器(假定这是一个Web应用程序关于用户管理的业务Bean)。完全

5、可以直接进行Unit测试,或者,简单地写个main方法测试:public class Main public static void main(String args) throws Exception ServiceBean service = new MyServiceBean(); service.addUser(bill, hellotomgoodbyetracymorningtoms password is: + service.getPassword(); if(service.findUser() service.deleteUser(执行结果:我们已经在一个main方法中实现了

6、业务,不过,将对象的生命周期交给容器管理是更好的办法,我们就不必为初始化对象和销毁对象进行硬编码,从而获得更大的灵活性和可测试性。想要把ServiceBean交给Spring来管理,我们需要一个XML配置文件。新建一个beans.xml,放到src目录下,确保在classpath中能找到此配置文件,输入以下内容:!DOCTYPE beans PUBLIC -/SPRING/DTD BEAN/ENhttp:/www.springframework.org/dtd/spring-beans.dtdbeans /beans以上XML声明了一个id为service的Bean,默认地,Spring为每个

7、声明的Bean仅创建一个实例,并通过id来引用这个Bean。下面,我们修改main方法,让Spring来管理业务Bean:import org.springframework.beans.factory.xml.XmlBeanFactory;import org.springframework.core.io.ClassPathResource; / init factory: XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource(beans.xml / use service bean: ServiceBean s

8、ervice = (ServiceBean)factory.getBean(s password is ) + / close factory: factory.destroySingletons();由于我们要通过main方法启动Spring环境,因此,首先需要初始化一个BeanFactory。红色部分是初始化Spring的BeanFactory的典型代码,只需要保证beans.xml文件位于classpath中。然后,在BeanFactory中通过id查找,即可获得相应的Bean的实例,并将其适当转型为合适的接口。接着,实现一系列业务操作,在应用程序结束前,让Spring销毁所有的Bean

9、实例。对比上一个版本的Main,可以看出,最大的变化是不需要自己管理Bean的生命周期。另一个好处是在不更改实现类的前提下,动态地为应用程序增加功能。所谓AOP即是将分散在各个方法处的公共代码提取到一处,并通过类似拦截器的机制实现代码的动态织入。可以简单地想象成,在某个方法的调用前、返回 前、调用后和抛出异常时,动态插入自己的代码。在弄清楚Pointcut、Advice之类的术语前,不如编写一个最简单的AOP应用来体验一下。考虑一下通常的Web应用程序都会有日志记录,我们来编写一个LogAdvisor,对每个业务方法调用前都作一个记录:import java.lang.reflect.Meth

10、od;import org.springframework.aop.MethodBeforeAdvice;public class LogAdvisor implements MethodBeforeAdvice public void before(Method m, Object args, Object target) throws Throwable Log + target.getClass().getName() + . + m.getName() + ()然后,修改beans.xml:serviceTargetlogAdvisorcom.crackj2ee.example.spr

11、ing.LogAdvisororg.springframework.aop.framework.ProxyFactoryBeanproperty name=proxyInterfacesvaluecom.crackj2ee.example.spring.ServiceBean/propertytargetref local=/interceptorNameslistlogAdvisor/bean注意观察修改后的配置文件,我们使用了一个ProxyFactoryBean作为service来与客户端打交道,而真正的业务Bean即 MyServiceBean被声明为serviceTarget并作为参数

12、对象传递给ProxyFactoryBean,proxyInterfaces 指定了返回的接口类型。对于客户端而言,将感觉不出任何变化,但却动态加入了LogAdvisor,关系如下:运行结果如下,可以很容易看到调用了哪些方法:要截获指定的某些方法也是可以的。下面的例子将修改getPassword()方法的返回值:import org.aopalliance.intercept.MethodInterceptor;import org.aopalliance.intercept.MethodInvocation;public class PasswordAdvisor implements Met

13、hodInterceptor public Object invoke(MethodInvocation invocation) throws Throwable Object ret = invocation.proceed(); if(ret=null) return null; String password = (String)ret; StringBuffer encrypt = new StringBuffer(password.length(); for(int i=0; ipassword.length(); i+) encrypt.append(* return encryp

14、t.toString();这个PasswordAdvisor将截获ServiceBean的getPassword()方法的返回值,并将其改为*。继续修改beans.xml:passwordAdvisorTargetcom.crackj2ee.example.spring.PasswordAdvisorpasswordAdvisororg.springframework.aop.support.RegexpMethodPointcutAdvisoradvicepatterns.*getPasswordpasswordAdvisor利用Spring提供的一个RegexMethodPointcutA

15、dvisor可以非常容易地指定要截获的方法。运行结果如下,可以看到返回结果变为*:还需要继续增强ServiceBean?我们编写一个ExceptionAdvisor,在业务方法抛出异常时能做一些处理:import org.springframework.aop.ThrowsAdvice;public class ExceptionAdvisor implements ThrowsAdvice public void afterThrowing(RuntimeException re) throws Throwable Exception + re.getMessage();将此Advice添加到beans.xml中,然后在业务Bean中删除一个不存在的用户,故意抛出异常:service.deleteUser(not-exist再次运行,注意到ExceptionAdvisor记录下了异常:利用Spring非常强大的IoC容器和AOP功能,我们能实现非常灵活的应用,让Spring容器管理业务对象的生命周期,利用AOP增强功能,却不影响业务接口,从而避免更改客户端代码。为了实现这一目标,必须始终牢记:面向接口编程。而Spring默认的AOP代理也是通过Java的代理接口实现的。虽然Spring也可以用CGLIB实现对普通类的代理,但是,业务对象只要没有接口,就会变得难以扩展、维护和测试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1