1、 spring 的快速入门案例 spring 是什么?struts 是 web 框架 (jsp/action/actionfrom)hibernate 是 orm 框架,处于持久层.spring 是容器框架,用于配置 bean,并维护 bean 之间关系的框架 spring 中有一个非常概念: bean (是 java 中的任何一种对象 javabean/service/action/数据源./dao, ioc(控制反转 inverse of control) di( dependency injection 依赖注入) 画一个框架图 快速入门开发一个 spring 项目.1. 引入 spri
2、ng 的开发包(最小配置 spring.jar 该包把常用的 jar 都包括, 还要 写日志包 common-logging.jar2. 创建 spring 的一个核心文件 applicationContext.xml, hibernate 有核心 hibernate.cfg.xml struts 核心文件 struts-config.xml, 该文件一般放在 src 目录下,该文件中引入 xsd 文件 :可以从给出的案例中拷贝一份.3. 配置 bean韩顺平4. 在 Test.java 中,我们怎么使用/我们现在使用 spring 来完成上面的任务/1.得到 spring 的 applica
3、tionContext 对象( 容器对象)ApplicationContext ac=new ClassPathXmlApplicationContext(“applicationContext.xml“);UserService us=(UserService) ac.getBean(“userService“);us.sayHello();5. 细节讨论?传统的方法和使用 spring 的方法5.1 使用 spring ,没有 new 对象,我们把创建对象的任务交给 spring 框架5.2 spring 的运行原理图:5.3 我们再看 spring 对上面案例总结:spring 实际上是
4、一个容器框架,可以配置各种 bean(action/service/domain/dao),并且可以维护bean 与 bean 的关系,当我们需要使用某个 bean 的时候,我们可以 getBean(id),使用即可.ioc 是什么?答 :ioc(inverse of controll ) 控制反转: 所谓控制反转就是把创建对象(bean),和维护对象(bean)的关系的权利从程序中转移到 spring 的容器(applicationContext.xml), 而程序本身不再维护.DI 是什么 ?答: di(dependency injection) 依赖注入 : 实际上 di 和 ioc 是
5、同一个概念,spring 设计者认为 di更准确表示 spring 核心技术 学习框架,最重要的就是学习各个配置.把 Applicationcontext 做成一个单例的.上机练习: 把我写的代码走一遍 . spring 开发提倡接口编程,配合 di 技术可以层与层的解耦举例说明:现在我们体验一下 spring 的 di 配合接口编程的,完成一个字母大小写转换的案例:思路:1. 创建一个接口 ChangeLetter2. 两个类实现接口3. 把对象配置到 spring 容器中4. 使用通过上面的案例,我们可以初步体会到 di 配合接口编程,的确可以减少层(web 层) 和 业务层的耦合度.思考
6、题:接口ValidateUser有一个方法:check(?)有两个类CheckUser1 implements ValidateUsercheck/ 安装 xml 验证CheckUser2 implements VallidateUsercheck()/ 到数据库去验证 从 ApplicationContex 应用上下文容器中获取 bean 和从 bean 工厂容器中获取 bean具体案例:/从 ApplicationContext 中取 beanApplicationContext ac=new ClassPathXmlApplicationContext(“com/hsp/ioc/bean
7、s.xml“);/当我们去实例化 beans.xml,该文件中配置的 bean 被实例(该 bean scope 是 singleton)从bean 中取出 student/如果我们使用 beanfactory 去获取 bean,当你只是实例化该容器, 那么/容器的 bean 不被实例化,只有当你去使用 getBean 某个 bean 时,才会实时的创建.BeanFactory factory = new XmlBeanFactory(new ClassPathResource(“com/hsp/ioc/beans.xml“);factory.getBean(“student“);结论: 1.
8、如果使用 ApplicationContext ,则配置的 bean 如果是 singlton 不管你用不用,都被实例化.(好处就是可以预先加载,缺点就是耗内存 )2.如果是 BeanFactory ,则当你获取 beanfacotry 时候,配置的 bean 不会被马上实例化,当你使用的时候,才被实例(好处节约内存 ,缺点就是速度)3.规定: 一般没有特殊要求,应当使用 ApplicatioContext 完成(90%) bean 的 scope 的细节入门案例:/获取两个 studentStudent s1=(Student) ac.getBean(“student“);Student s
9、2=(Student) ac.getBean(“student“);System.out.println(s1+“ “+s2); request session global-session 是在 web 开发中才有意义. 三种获取 ApplicationContext 对象引用的方法1. ClassPathXmlApplicationContext - 通过类路径2. FileSystemXmlApplicationContext - 通过文件路径举例:ApplicationContext ac=new FileSystemXmlApplicationContext(“文件路径 beans.
10、xml / applicationContext.xml“);3. XmlWebApplicationContext bean 的生命周期为什么总是一个生命周期当做一个重点?Servlet - servlet 生命周期 init() destory()java 对象生命周期.往往笔试,面试总喜欢问生命周期的问题 实例化(当我们的程序加载 beans.xml 文件),把我们的 bean(前提是 scope=singleton)实例化到内存 调用 set 方法设置属性 如果你实现了 bean 名字关注接口(BeanNameAware) 则,可以通过 setBeanName 获取 id号 如果你实现
11、了 bean 工厂关注接口,(BeanFactoryAware), 则可以获取 BeanFactory 如果你实现了 ApplicationContextAware 接口,则调用方法 /该方法传递 ApplicationContextpublic void setApplicationContext(ApplicationContext arg0)throws BeansException / TODO Auto-generated method stubSystem.out.println(“setApplicationContext“+arg0); 如果 bean 和 一个后置处理器关联,
12、则会自动去调用 Object postProcessBeforeInitialization 方法 如果你实现 InitializingBean 接口,则会调用 afterPropertiesSet 如果自己在 则可以在 bean 定义自己的初始化方法. 如果 bean 和 一个后置处理器关联,则会自动去调用 Object postProcessAfterInitialization方法 使用我们的 bean11. 容器关闭12. 可以通过实现 DisposableBean 接口来调用方法 destory13. 可以在 调用定制的销毁方法小结: 我们实际开发中往往,没有用的这么的过程 ,常见的
13、是:1-2-6-10-9-11 上机练习: 把使用每个 bean 的时间记录到一个 recoder.txt 文件 ,内容是xxbean. 使用时间是 : 1999-11-11 11:11:11问题:通过 BeanFactory 来获取 bean 对象,bean 的生命周期是否和 Applicationcontext 是一样吗?不是一样的,bean 是工厂中创建的生命周期会简单一些: 配置 bean 的细节 scope 的说明: 尽量使用 scope=”singleton” ,不要使用 prototype,因为这样对我们的性能影响较大. 如何给集合类型注入值.java 中主要的集合有几种: ma
14、p set list / 数组 Department 类:package com.hsp.collection;import java.util.List;import java.util.Map;import java.util.Set;public class Department private String name;private String empName;private List empList;private Set empsets;private Map empMaps;public Set getEmpsets() return empsets;public void s
15、etEmpsets(Set empsets) this.empsets = empsets;public String getEmpName() return empName;public void setEmpName(String empName) this.empName = empName;public String getName() return name;public void setName(String name) this.name = name;public List getEmpList() return empList;public void setEmpList(L
16、ist empList) this.empList = empList;public Map getEmpMaps() return empMaps;public void setEmpMaps(Map empMaps) this.empMaps = empMaps;/Employeel 类 package com.hsp.collection;public class Employee private String name;private int id;public int getId() return id;public void setId(int id) this.id = id;public String getName() return name;public void setName(String name) this.name = name;beans.xml 配置文件:小明小明小明小明小明小明小明【点 http 协议 referer 】abcdhello 内部 bean 继承配置public class Student public class Gradate extends Student在 beans.xml 文件中体现配置
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。