guokehua(@yahoo.com.cn oy Java 1010 21SpringIoC(1) 郭克华J2EE框架实战教学视频
oy Java! J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 21SpringIOC SpringIOC(1)
guokehua(@yahoo.com.cn 了y基于BS的典型三层架构 展现层( Presentation 业务逻辑层 持久化层(Data Laver) (Buseness Layer) source Layer) Web Work/Struts loc Spring loc Hibernate IoC容器, 映射文件, Action Form Bean,配 Hibernate接口 置文件,模板页面 AOP, Hibernate的支 持,事务管理 DAO模式 Domain Model Business Objects 郭克华J2EE框架实战教学视频
oy Java! J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 基于B/S的典型三层架构 的典型三层架构
guokehua(@yahoo.com.cn 了y问题 你做了一个网站,其中要用到一些业务逻辑 登陆(返回 boolean),注册(返回 boolean),查 询(返回 HashSet)。这个模块经常被改变,或 者为不同的业务服务(如银行和商场都有这些 功能)而切换,你怎样在 Action里面调用这个 模块? new 一个对象 1·方案1:将所有可能出现的切换情况都拷贝到 Action目录下 方案2:面向接口编程,并且用到工厂 郭克华J2EE框架实战教学视频
oy Java! J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 问题 • 你做了一个网站,其中要用到一些业务逻辑: 登陆(返回boolean),注册(返回boolean),查 询(返回HashSet)。这个模块经常被改变,或 者为不同的业务服务(如银行和商场都有这些 功能)而切换,你怎样在Action里面调用这个 模块? • new 一个对象 • 方案1:将所有可能出现的切换情况都拷贝到 Action目录下 • 方案2:面向接口编程,并且用到工厂
guokehua(@yahoo.com.cn public class Action public void executeD I CustomerDao icao=( (CustomerDao) Bean Factory. get Bean(“别名”); dao login; 10101 public class Bean Factory{∥框架化 public static Object get Bean( String aName)( String className=根据读取的类名; return Class forName(className). newInstance0; -设置配置文件,定义别名和类名的映射 public interface ICustomerDaof public abstract boolean login public class Customer Dao implements ICustomerDaod public boolean login{*代码*
oy Java! J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 public class Action{ public void execute(){ ICustomerDao icdao = (ICustomerDao )BeanFactory. getBean(“别名”); cdao.login(); } } public class BeanFactory{ //框架化 public static Object getBean(String aName){ String className = 根据读取的类名; return Class.forName(className).newInstance(); } }-------------设置配置文件,定义别名和类名的映射 public interface ICustomerDao{ public abstract boolean login(); } public class CustomerDao implements ICustomerDao{ public boolean login(){/*代码*/} }
guokehua(@yahoo.com.cn 了y问题的提出 有一个应用,要求能够很好地接受u盘或 者移动硬盘(假如两种介质的读写算法不 1010 样)的接入,你如果是开发人员,应该 怎么样开发这个应用? Q·注意:程序里面只有两个功能: ReadInfoo, WriteInfoo 方案1:在应用里面将所有可能的介质算 法都开发一遍 郭克华J2EE框架实战教学视频
oy Java! J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 问题的提出 • 有一个应用,要求能够很好地接受u盘或 者移动硬盘(假如两种介质的读写算法不 一样)的接入,你如果是开发人员,应该 怎么样开发这个应用? • 注意:程序里面只有两个功能: ReadInfo(),WriteInfo() • 方案1:在应用里面将所有可能的介质算 法都开发一遍
guokehua(@yahoo.com.cn 了y更好的方案:一切在后期运行 调用方(应用)只知道功能(读写),不知道 功能如何实现(谁在读写) ·调用方(应用)和模块(u盘或者移动硬盘) 之间用配置文件联系起来 创·当u盘或者移动硬盘接入时,改变配置文件, 调用方始终在读配置文件,并没有改变源 1代码 配置文件改变,可以进行模块切换,甚 至改变模块行为 郭克华J2EE框架实战教学视频
oy Java! J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 更好的方案:一切在后期运行 更好的方案:一切在后期运行 • 调用方(应用)只知道功能(读写),不知道 功能如何实现(谁在读写) • 调用方(应用)和模块(u盘或者移动硬盘) 之间用配置文件联系起来 • 当u盘或者移动硬盘接入时,改变配置文件, 调用方始终在读配置文件,并没有改变源 代码. • 配置文件改变,可以进行模块切换,甚 至改变模块行为
guokehua(@yahoo.com.cn Jy开发USB接口的模拟程序 应用方面 个接口,定义了输入输出的功能 1010 U盘方面 个具体实现类,实现这个接口 移动硬盘方面 一个具体实现类,实现这个接口 ·不同硬件接上去,配置文件加以改变 郭克华J2EE框架实战教学视频
oy Java! J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 开发USB接口的模拟程序 接口的模拟程序 • 应用方面 – 一个接口,定义了输入输出的功能 • U盘方面 – 一个具体实现类,实现这个接口 • 移动硬盘方面 – 一个具体实现类,实现这个接口 • 不同硬件接上去,配置文件加以改变
guokehua(@yahoo.com.cn Jy开发USB接口的模拟程序 ·增加 Spring框架支持,生成配置文件 ·在配置文件里面添加 Windows2000方面增加 ApplicationContext ctx=new Ei1 e systerM1 Applicationcontext("配置文件 IUSB usb=(IUSB)ctx. getBean(对象名〃) ·可以通过usb对对象进行操作 郭克华J2EE框架实战教学视频
oy Java! J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 开发USB接口的模拟程序 接口的模拟程序 • 增加Spring框架支持,生成配置文件 • 在配置文件里面添加: • Windows2000方面增加: ApplicationContext ctx=new FileSystemXmlApplicationContext(“配置文件 "); IUSB usb = (IUSB) ctx.getBean(“对象名”); • 可以通过usb对对象进行操作
guokehua(@yahoo.com.cn 了y从中我们可以学到什么? 对象的生成由 Spring通过读取配置文件 ( application Context. xm|)动态设置 。测试代码仅仅面向接口编程,而无需知道实现 类的具体名称。同时,我们可以很简单的通过 修改配置文件来切换具体的底层实现类。 (c1ass属性) 组件依赖关系减少, 问题:如果用传统方法作,会有什么后果? Spring.作用1:这种思想可以很好地实现同类 不同质的模块切换:例如要用不同的方法将内 容写入到不同的介质 郭克华J2EE框架实战教学视频
oy Java! J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 从中我们可以学到什么 从中我们可以学到什么? • 对象的生成由Spring通过读取配置文件 (applicationContext.xml)动态设置。 • 测试代码仅仅面向接口编程,而无需知道实现 类的具体名称。同时,我们可以很简单的通过 修改配置文件来切换具体的底层实现类。 (class属性) • 组件依赖关系减少, • 问题:如果用传统方法作,会有什么后果? • Spring作用1:这种思想可以很好地实现同类 不同质的模块切换:例如要用不同的方法将内 容写入到不同的介质
guokehua(@yahoo.com.cn J开发具备属性的Spmg程序 问题:编写一个界面(java.awt. Frame),要求:界面的标题在ML 文件里面配置 传统方法:读MM文件的代码必须自己写。 ·使用 Spring可以节省这个工作 (1)建立 FrmTest类,增加一个 title属性 (2)增加 spring支持 B.(3)在配置文件中增加 值 (4)在主函数中增加: Applicationcontext ctx=new Fi1 e systerm1App1 icationcontext(配置文件"); FrmTest ft=( FrmTest)ctx. getBean(“对象名”) 郭克华J2EE框架实战教学视频
oy Java! J guokehua@yahoo.com.cn 郭克华J2EE框架实战教学视频 开发具备属性的 开发具备属性的Spring程序 • 问题:编写一个界面(java.awt.Frame),要求:界面的标题在XML 文件里面配置。 • 传统方法:读XML文件的代码必须自己写。 • 使用Spring可以节省这个工作 • (1)建立FrmTest类,增加一个title属性 • (2)增加spring支持 • (3)在配置文件中增加: 值 • (4)在主函数中增加: ApplicationContext ctx=new FileSystemXmlApplicationContext(“配置文件"); FrmTest ft = (FrmTest) ctx.getBean(“对象名”);