Spring-1-简介与入门

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Spring第一课简介与入门Spring简介•与Hibernate、Struts一样,Spring也是一个开源项目,它的作者是RodJohnson,官方网站是。•Spring的基础思想来源于RodJohnson的一本著名的j2ee书籍:ExpertOne-on-OneJ2EEDesignandDevelopment。在这本书中,RodJohnson列举EJB的种种问题,并提出了相应的解决办法。•从那时起,人们对于EJB的狂热追捧才算结束,转而进入更理性的时代。Spring简介•RodJohnson是悉尼大学博士,猜猜他的专业是什么?•RodJohnson在开发出Spring之前,主要从事项目开发咨询与培训工作。在Spring被广泛认可之后,创办了interface21公司,致力于Spring咨询与培训•RodJohnson还是JDO2.0和Servlet2.4专家组成员。Spring简介•Spring核心技术包括两个方面,一是控制反转(InversionofControl,IoC),另一个是面向方面编程(AspectOrientedProgramming,AOP)。•Spring囊括了十分丰富的内容,包括表述层、数据层,它提供了许多原来只有EJB才能提供的功能(如宣称式的事务管理),但Spring又无须运行在EJB容器上。•无论Spring涉足到哪一个领域,使用的都是简单的JavaBean,一般无须再实现复杂的接口。Spring简介Spring简介Spring技术基础•Spring的核心是IoC和AOP,它们都是由Java原有技术发展而来的。•IoC技术是通过Java的反射机制以及JavaBean的自省机制实现的•AOP技术是依赖代理模式实现的,JFC中提供了对代理模式的内在支持,Spring也是通过这种技术实现的。•为了能够理解Spring的IoC机制,下面对反射机制和内省机制做简单介绍。反射机制•Java的反射机制允许程序在运行时动态加载对象,并且动态地调用其中的方法。•JFC中的java.lang.reflect包便提供了这种支持,主要是通过java.lang.Class、java.lang.reflect.Method、Field、Constuctor等等类完成这项工作的。•例如,如果有下面的方法:ObjectmyInvoke(Stringclass,StringmethodName,Objec[]args)实现动态调用某一类的某一方法,该如何实现?反射机制publicObjectmyInvoke(StringclassName,StringmethodName,Objectargs[]){Objectresults=null;try{Classclazz=Class.forName(className);Methodmethod=null;for(inti=0;iclazz.getMethods().length;i++){method=clazz.getMethods()[i];if(methodName.equals(method.getName())){results=method.invoke(clazz.newInstance(),args);break;}}}catch(Exceptione){e.printStackTrace();}returnresults;}反射机制•使用时指明类名和方法名:classSomeToBeInvoke{publicintcalculate(inti){returni*i;}}ReflectDemodemo=newReflectDemo();Objectobj=demo.myInvoke(SomeToBeInvoke,calculate,newObject[]{newInteger(6)});System.out.println(obj);Class类•java.lang.Class代表一个类,可以通过三种方式得到Class的实例:1.Object.getClass()2.Class.forName()3.直接用对象点class,如:a.class•Class的实例代表的是类,不代表类的实例。即Classc=a.class,c是类而不是实例。如果创建实例,可以调用newInstance()方法。Class类•可以通过Class加载类并了解类的内部结构:1.获取构造函数:ConstructorgetConstructor(Class[]parameterTypes)Constructor[]getConstructors()2.获取方法:MethodgetMethod(Stringname,Class[]parameterTypes)Method[]getMethods()3.获取属性:FieldgetField(Stringname)Field[]getFields()4.检查特性:Class[]getInterfaces()、PackagegetPackage()、booleanisArray()、booleanisInterface()Field类•java.lang.reflect.Field代表属性,是java.lang.reflect.AccessibleObject的子类,故可以调用其setAccessible方法访问private类型的属性。•Field中声明了多个getter和setter方法,可以设置属性的值。Method类•java.lang.reflect.Method代表类中的方法,它也是java.lang.reflect.AccessibleObject的子类,可以通过setAccessible访问private类型方法。•可以通过调用Objectinvoke(Objectobj,Object[]args)方法,间接调用对象方法。Contructor类•java.lang.reflect.Constructor代表构造函数,是java.lang.reflect.AccessibleObject的子类,可以通过setAccessible访问private类型方法。•可以通过ObjectnewInstance(Object[]initargs方法调用构造函数,创建新实例。JavaBean自省机制•JavaBean的属性一般都具有getter方法和setter方法,通过这些方法可以更改或读取JavaBean属性。•JavaBean具有的自省机制可以在不知道JavaBean都有哪些属性的情况下,设置它们的值。•例如:jsp:setPropertyproperty=“*”/可以设置JavaBean中与参数同名的属性,这是如何实现的呢?Introspector•自省机制是使用Introspector实现的。•Introspector的方法大部分都是静态的,可以直接调用,如getBeanInfo(ClassbeanClass)可以得到一个JavaBean的BeanInfo实例。•BeanInfo实例包含了一个JavaBean类属性和方法的信息。如:1.BeanDescriptorgetBeanDescriptor()2.MethodDescriptor[]getMethodDescriptors()3.PropertyDescriptor[]getPropertyDescriptors()PropertyDescriptor•PropertyDescriptor代表了属性,可以通过它得到属性的getter方法和setter方法。即:1.MethodgetReadMethod()2.MethodgetWriteMethod()•通常在不知道JavaBean属性时,如果设置JavaBean属性就采用PropertyDescriptor。PropertyDescriptor(StringpropertyName,ClassbeanClass)代理模式•所谓代理模式即是由代理对象接管对象访问,用户在使用时感觉是在原始对象操作,但实际是通过代理对象访问的原始对象。•Java为代理模式提供了内置的支持,这是通过java.lang.reflect.Proxy以及java.lang.reflect.InvocationHandler实现的。谢谢

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功