Spring备课内容.doc_第1页
Spring备课内容.doc_第2页
Spring备课内容.doc_第3页
Spring备课内容.doc_第4页
Spring备课内容.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2012A Srping第一节课内容:2011/11/15 晚第一点:怎么去看待Srping框架。回顾我们之前写过的程序的基本结构:Dao daoImpl Factory (其中应用到了单模式) Service ServiceImpl 、Action中应用到了ServiceImpl。那么这个时候我们是否想过我们这样做有哪些缺点?首先 我们应用了很多的工厂类(用工厂的目的是什么呢?), 在程序的代码中new很多对象,那么这个时候我们对这些配置并没有统一的去管理,而是散落在各个javaBean中。为了使这一部分能够统一的进行系统的管理, 我们引入了Spring框架。例如:1、ServiceImpl 中用到了daoImpl 对象,我们说: servieImpl 依赖于daoIMpl, 这是一种依赖关系, action 中用到了serviceImpl 我们知道 action依赖于serviceImpl, 他们都有这种依赖关系。 2另一种情况: hibernate 中的session创建,事务的开启和关闭, 都是我们手动来管理的, hibernate来处理的,但是这个时候我们也可以交个spring来处理, 也就是说。 我们将对象的创建和这种依赖关系、事务交给Spring。处理。本来我们的处理可以理解为 A类用到B类,那么A是直接的去拿B类的东西。用到Spring后, 我们只需要在Spring中声明,A和B的关系, 告诉A你用到了B,通过Srping主动的将B的对象给(注入给)A。这是我们应用到Spring后跟以往不同的第一个地方。 通过以上的内容我们知道了Srping能够为我们做什么!我们必须知道:依赖性注入含义。含义:当我们需要使用一个类的对象时,我们不需要自己找这个对象, 而是通过第三方容器给我们注入进来。第二点:刚开始学Spring我们需要了解几个关键的词语:IOC:Inversion of Control(控制反转):Ioc说白了,就是容器控制程序之间的关系。而非传统的程序代码直接控制。所谓控制反转就是控制权有应用代码中转移到外部容器中,控制权的转移,即所谓的反转。DI: Dependency Injection (依赖性注入)AOP:Aspect-Oriented Programming(面向切面编程)ORM:对象关系映射(Srping框架中的,而是hibernate和ibatis比如我们的表和vo以及配置xml文件映射表)第三点: 了解Srping的核心:即IOC容器该容器提供了Srping的基本功能。 该容器的的主要组件是BeanFactory,他是工厂模式的实现,BeanFactory使用控制反转(IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开(说白了就是将一切对象的创建交给了Srping处理) 第四点: 了解Srping源文件包的内容:dist: 存放Spring的核心Jar文件、doc:存放Srping的帮助文档、lib: 该目录存放Srping的第三方Jar文件,例如整合时候我们用到的某些文件sample:存放Spring提供的一些实力程序src:存放Spring 框架的所有源文件第五点: 我们写一个基本的依赖注入关系需要的Jar包:dist/spring.jarlib/Jakarta-commons/commons-logging.jarlib/log4j/log4j-1.2.14.jar应用上面的三个jar包即可来完成依赖注入关系。第六点: Srping的注入方式:第一点是构造方法的注入、第二点是set方法的注入,第三种接口注入(不讲,不常用因为侵入性强)构造方法和set方法注入的区别:(时机早晚有差别:构造方法注入时间比setter时间早)构造方法会在实例化Manager的时候直接就将实例化好的sqlServerDaoImp(以上面的为例)对象注入进来,时机比较早。Set方法注入:将Manager实例化后,再调用setDao方法将sqlServerDaoImpl对象注入进来。 为什么常用set而不用构造方法这种方式注入?依赖的对象较多时, 构造方法的注入方式会显得构造方法非常的冗长,setter方法显示直观。所以应用上以set方法为主。第七点: 我们应用Spring时候需要获取bean。以下是获取beanFactory的方法。1、常用的是BeanFactory bean=new ClassPathXmlApplicationContext(applicationContext.xml);UserService service=(UserService) bean.getBean(userServiceImpl);service.insert();2、常用的的是:ApplicationContext context = new ClassPathXmlApplicationContext(applicationContext.xml); PersonService service= (PersonService) context.getBean(PersonServiceImpl);2012A Spring第二节课内容: 1、 在Spring中最基本的注入:这里我们讲解String类型、String数组、List、Map、Set以及对象、还有日期类型(其中包含属性编辑器)的注入。注意:在对日期类型的注入处理中,我们需要单独对日期进行处理,因为在Spring的配置文件中,默认的元素都默认为字符串,那么我们要告诉Spring某个变量是日期才行。2、 具体的注入方法如下:通过set方法注入的,以下是往ZygServieImpl类中注入这些变量value值,以下都是值的注入。(1)String类型:aaa(2)String数组: abc(3)List集合:aaaddd(4)Map集合: aaa(5)Set集合:set1(6)最麻烦的日期类型的处理:首先要写一个属性编辑器:目的是通过属性编辑器来讲就是对日期格式的字符串来转化为日期类型,然后将此内容在Spring中声明。 属性编辑器写法:此编辑器就是一个java类,此类必须 继承java.beans.PropertyEditorSupport; 重写setAsText 方法。 具体代码如下:import java.beans.PropertyEditorSupport;import java.text.Format;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class Editor extends PropertyEditorSupportprivate String format=yyyy-MM-dd;Overridepublic void setAsText(String str) throws IllegalArgumentException / TODO Auto-generated method stubDate day;try day = new SimpleDateFormat(format).parse(str);setValue(day); catch (ParseException e) / TODO Auto-generated catch blocke.printStackTrace();Spring文件的配置: 以上是为了注入我们写的Editor属性编辑器,下面是对日期的注入。1987-10-12(7)、Spring中公共属性的注入: address zyg 24 plr 25 123321 (8)、Spring 中多个applicationContext.xml 的处理以及配置。在Spring中多个applicationContext.xml 我们可以分为多个, 例如:applicationContext.xml applicationContext-user.xml applicationContext_admin.xml 这种多个配置文件,在Spring中都视为是同一个配置文件。 (9)Spring的Bean作用域即: 我们之前new对象创建对象的时侯可以new多个例如:User user1=new User();User user2=new User(); 在Spring中怎么来创建多个对象呢?默认是singleton,我们以后可以不用设值此属性。我们通用singleton即可。第三节课内容:Spring的自动装配:按名字装配、按照类型装配。(并不常用,我们开发中最好是直接由我们自己来完成依赖关系的声明,因为这样很清晰的看到Bean的依赖关系)知识点:第一点:Spring框架的配置文件可以根据名称装配,也可以按照类型装配Bean的关系。例如:Bean1类:public class Bean1 private String name;public String getName() return name;public void setName(String name) = name; Bean2类:public class Bean1 private String name;public String getName() return name;public void setName(String name) = name; 配置文件:按照名称自动装配:根据id找依赖关系。这里是beans标签中的内容:声明default-autowire属性:default-autowire=byName zyg按照类型自动装配:根据class找依赖关系。default-autowire=byType zyg !- -手动装配:必须通过ref属性或者标签指定我们想要的依赖关系。 zyg 以上是三种装配的方式的比较。测试类的测试方法:public static void main(String args) BeanFactory bean=new ClassPathXmlApplicationContext(applicationContext.xml); Bean2 bean2=(Bean2) bean.getBean(bean2); System.out.println(bean2.getBean1().getName();第二点:(作为了解、并不重要)延迟初始化bean :lazy-init=true可见帮助文档的例子,看看他放到了那个位置。使用延迟加载bean的时候, 在应用一个具体bean时候才进行实例化。不适用延迟加载的时候, 在ApplicationContext进行实例化时候,所有bean已经给我们都实例化好了。什么时候用: 应用启动很慢的时候才用这个, 所以很少用。第三点:(了解即可)init-method 和destroy-method 的应用在Spring配置中, 通过init-method 和destroy-method 属性指定某个bean在加载时开始和结束执行的两个方法。例如:测试类:public static void main(String args) ClassPathXmlApplicationContext bean=new ClassPathXmlApplicationContext(applicationContext.xml); Bean2 bean2=(Bean2) bean.getBean(bean2); System.out.println(bean2.getBean1().getName(); bean.destroy();配置文件: 这里参数指定的是方法名字。 Bean2这个类中含有init和destroy两个方法,分别输出两行不同内容。 结果老师就不粘贴出来了。第四节课:AOP 的应用: java的静态代理和动态代理。年11月20日晚我们什么时候可以应用代理? 为什么要用到代理?例如:我们对某个实现类中的方法进行记录日志,对其记录处理消息等,也就是说进行安全性检查,此时我们需要对每个方法中调用一个安全性检查或者记录的方法。 这样这些进行安全性检查的方法就会侵入我们的这些实现类,但这些侵入进来的方法并没有参与我们需要的业务逻辑,并且他散落在实现类中,那么此时我们就要考虑了,怎么不让他破坏我们的实现类。-应用代理类。使用代理前的实例:此时可以看到我们的Impl类受到侵入。接口:public interface UserDao public int insert(); public void delete() ;实现类:public class UserDaoImpl implements UserDaopublic void delete() control(delete方法开始:);System.out.println(-delete方法执行-);control(delete方法结束:);public int insert() control(Insert方法开始:);System.out.println(-insert方法执行-);control(Insert方法结束:);return 0; /此时control方法跟我们的业务逻辑没有关系。并且他侵入了我们的业务逻辑类。/而且我们的Impl类受到破坏 public void control(String a) System.out.println(a); 测试类:public class Test_1 /* * param args */public static void main(String args) UserDao userDao=new UserDaoImpl();userDao.insert();结果:Insert方法开始:-insert方法执行-Insert方法结束:静态代理:由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。例如:接口同上不变。实现类:public class UserDaoImpl implements UserDaopublic void delete() System.out.println(-delete方法执行-);public int insert() System.out.println(-insert方法执行-);return 0;代理类:public class UserDaoImpl_Proxy implements UserDao private UserDaoImpl userDao; public UserDaoImpl_Proxy(UserDaoImpl userDao) this.userDao=userDao; public void delete() control(delete方法开始:);userDao.delete();control(delete方法结束:);public int insert() control(insert方法开始:);userDao.insert();control(insert方法结束:);return 0;public void control(String a) System.out.println(a); 测试类只要使用代理类就可以达到我们的要求:测试类如下:public class Test_2 /* * param args */public static void main(String args) UserDao proxy=new UserDaoImpl_Proxy(new UserDaoImpl();proxy.delete();结果:delete方法开始:-delete方法执行-delete方法结束:知识点:如下:通过上面的例子我们知道: 这些嵌入的方法,我们可以叫做横切性关注点。 我们可以将这些横切性关注点来提取出来,封装到一个类中,然后在运行时,直接给我们将这些方法横切进去。这也就是我们的思想,我们现在学习的就可以实现这一点。注意: Spring的AOP机制就是采用JDK中的动态代理机制实现的。下面我们看看的动态代理模式:动态代理:注意:我们采用动态代理,上面我们写过的那个代理类就不存在了,而是在我们运行时自动生成。应用的动态代理需要实现java.lang.reflect.InvocationHandler 接口。实现invoke方法: 例如:import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class UserDaoImpl_Proxy2 implements InvocationHandler private Object targetObject;/目标对象,被代理的对象private Object proxyObject;/代理对象public Object newProxyObject(Object targetObject)/生成代理对象的方法。this.targetObject=targetObject;return Proxy.newProxyInstance(targe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论