资源预览内容
第1页 / 共144页
第2页 / 共144页
第3页 / 共144页
第4页 / 共144页
第5页 / 共144页
第6页 / 共144页
第7页 / 共144页
第8页 / 共144页
第9页 / 共144页
第10页 / 共144页
亲,该文档总共144页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第 一 章,Spring 简介,目标,理解什么是Spring 理解Spring的用途,Spring简介,Spring是一个开源框架,它的目的是为了简化企业级系统开发而诞生的 Spring从小里说,是个容器,往大里说,就是个框架 Spring是轻量级的,它的Jar包只有1M多一点,而且,它是非侵入式的:你一般不需要在你的类里import它的包,理解容器与框架,什么是容器,请回忆Servlet,Web容器,Servlet A,Servlet B,理解容器与框架,什么是容器,请回忆Servlet,Web容器,Servlet A,Servlet B,Servlet A,容器外部的Servlet 无法使用,只有这个Servlet由容器管理,它才能被客户端调用,然后由容器负责实例化、初始化、销毁这个Servlet,那么什么是框架,Web容器,Servlet A,客户端,每次请求和响应,都有些重复的事情要做,比如:国际化、日志、事务处理、异常处理、验证、自动处理请求参数等等,那么什么是框架,Web容器,Servlet A,客户端,除此之外,应用程序里还需要经常访问一些服务,每种服务的访问方式、方法是不一样的,消息服务,DB,Web Service,LDAP,Web容器,Servlet A,Spring框架,这就是框架,业务逻辑实现 A,客户端,消息服务,DB,Web Service,LDAP,Framework的定义,框架不仅要负责管理某些Bean的生命周期(容器的功能),还需要负责搭建某些基础设施(那些通用的部分) 例如:Struts能够称之为一个框架,是因为它负责管理Action ActionForm ActionForward这些对象的生命周期;另外它提供了国际化、异常处理、自动包装表单请求、验证等通用的功能 Hibernate也可以称之为一个框架,因为它维护持久化对象的生命周期,持久化对象的通用增删改查方法,Spring既是容器也是框架,由Spring负责业务逻辑 A 对象的实例化、初始化、服务(被调用)等,这是Spring作为容器的职责 Spring将大多数可重用、与业务逻辑无关的功能能够自行或交由其他组件完成、这是它作为一个框架的职责,Spring与其它容器的不同,Spring框架,业务逻辑实现 A,业务逻辑类 A 是POJO,不需要实现特殊接口,也不需要继承基类。因此在容器外也是可用的,Spring与其它框架的不同,比如将Spring与我们刚学习的Struts框架,Hibernate框架相对比,他们的不同之处在于: Spring还可以集成其它框架,它是一个“大”框架 Spring是专注于企业应用的框架,它所涉及的领域非常之广泛 Struts只是专注于实现Web应用程序开发的MVC部分 Hibernate只是专注于数据持久层的部分,Web容器,Servlet A,Spring框架,Spring可以集成Struts,业务逻辑实现 A,客户端,消息服务,DB,Web Service,LDAP,日志,事务处理,异常处理,Struts框架,Web容器,Servlet A,Spring框架,Spring可以集成Hibernate,业务逻辑实现 A,客户端,消息服务,DB,Web Service,LDAP,日志,事务处理,异常处理,Struts框架,Hibernat框架,Hello,Spring,创建Spring工程的步骤 添加 spring.jar commons-logging.jar log4j.jar log4j.properties 编写接口 编写实现类1,实现类2 编写配置文件 测试,Log4j配置简介,log4j.properties的位置 log4j的日志级别:DEBUG,INFO,WARN,ERROR 程序代码中指定日志信息的级别,根据配置文件,将不同级别的日志信息输出到文件或是控制台上,Log4j配置简介,log4j.rootLogger=WARN, CONSOLE, FILE log4j.appender.CONSOLE =org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d %p %c - %m%n log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.File=file.log log4j.appender.FILE.Append=false log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=%d %p %c - %m%n,布局,布局格式,默认日志级别,Appender 负责指定输出位置,Log4j配置简介,log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender log4j.appender.ROLLING_FILE.Threshold=ERROR log4j.appender.ROLLING_FILE.File=rolling.log log4j.appender.ROLLING_FILE.Append=true log4j.appender.ROLLING_FILE.MaxFileSize=10KB log4j.appender.ROLLING_FILE.MaxBackupIndex=1 log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout log4j.appender.ROLLING_FILE.layout.ConversionPattern=%d %p %c - %m%n log4j.logger.org.springframework=INFO log4j.logger.org.hibernate=INFO log4j.logger.org.yihang=INFO,针对某个包的日志级别设置,针对某个 Appender的日志级别设置,Log4j使用注意事项,Log4j在用在JBoss环境中使用方法需要注意:由于JBoss本身也使用了Log4j,因此为了避免冲突,你需要提供自己的log4j.properties和log4j.jar Log4j.properties需要放置在WEB-INF/classes目录下,与你的顶层包平级 Log4j.jar需要放置在WEB-INF/lib下,作业,亚瑟王手下有一批圆桌骑士(knight),他们的接受亚瑟王的直接委派(order)。亚瑟王布置给圆桌骑士的任务(task)有很多,比如:屠杀恶龙(kill dragon)、拯救美女(rescue beauty)等任务。每个任务都需要前期的准备工作(prepare)、执行(execute)、汇报几个步骤。另外,虽然圆桌骑士都都向亚瑟王宣誓忠诚、正直,但亚瑟王仍然不太放心。秘密派出间谍监视骑士们完成任务的过程,并要求间谍在任务完成时汇报(report)。 请用面向对象的方法来描述上述需求,第 二 章,Spring IOC,什么是接口,这个一个老问题,也是个新问题,取决你的认识 抛开你以前对接口的理解,请记住一句话:,接口是一种身份的象征,考虑以下对象,public class Person private String name; private int age; public void eat(String food) System.out.println(name + “正在吃“ + food); public void sleep() System.out.println(name + “正在睡大觉“); ,Person是一个普通 对象,不具有任何 特征,考虑以下接口,public interface Salesman public void sell(String goods); ,public interface Housework public void doIt(String work); ,Salesman是一个销售人员 接口,具有这个接口的 类都会推销的技能,Housework是一个家务人员 接口,具有这个接口的 类都必须会做家务,public class Person implements Housework, Salesman private String name; private int age; 。 public void doIt(String work) System.out.println(name + “正在做“ + work); public void sell(String goods) System.out.println(name + “正在销售“ + goods); ,当一个类实现了一个接口,那么 它就具有了一种新的身份 如果它实行了多个接口,它 就具有了多重身份,那么实现接口的意义是?,在商店,就(可以)把你当做销售人员用 在家,就(可以)把你当劳力用,举一些实际的例子,现在person1和person2都可以胜任销售人员用,但是只有一个职位,商场可以先雇佣一个销售人员,以后遇到好的再换。,Salesman,Person1,Person2,商场,人才市场,不好的选择,如果变成商场招聘的不是一个“职位”,而是一个具体的人(可以想象商场老板任人唯亲),那么即使人才市场有更优秀的李四、王五,那么替换掉张三是很难的,张三,李四,商场,人才市场,王五,它们不是老板 的亲戚,用在实际设计中,业务逻辑接口,实现类A,实现类B,Action,业务实现包,但还有一点没有考虑到,由谁去筛选人才?,Salesman,Person1,Person2,商场,人才市场,商场,市场部,人事部,Salesman,Person2,人才市场,Person1,Person2,选拔,任命,这里人事部的职责就是负责产生销售人员 再次提醒大家,不是产生具体对象,而是产生一个身份(某种职务) 在编程技术里,称人事部为:对象工厂 在Spring里,就对应着各种BeanFactory,什么是IoC,IoC即控制反转,有时候也叫做DI(依赖注入) 举报纸的例子 举商场的例子,考虑下列情形,是自己到报摊买报纸好 还是在邮局订阅,让人给送来好?,考虑下列情形,商场的例子里,是老板亲自去选拔、任命销售人员 还是老板下一个命令,让手下的人把这件事办妥了?,对于下面的例子,public class HelloImpl4 implements Hello private Message msg; public Message getMsg() return msg; public void setMsg(Message msg) this.msg = msg; public String sayHello(String name) return this.msg.getMsg() + “ “ + name; ,HelloImpl4这个类需要 用到Message类 那么, 是由HelloImpl4自己 实例化Message类呢 还是最好有人把 Message类实例化 好了,给它送过来呢,实现注入的步骤,A.在配置文件中声明好要注入的类,要注入的类定义,B.选
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号