




免费预览已结束,剩余12页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Spring串讲Spring的基本内容1. 什么是Spring:是一个用来简化企业级程序开发的分层的框架。它旨在分离体系结构的层次,因此每一层都可以修改而不会影响到其它层。层与层之间的依赖通常是以接口的形式表现,以确保其耦合尽可能松散。2. Spring的组成(7个模块):(1) SpringCore:Spring的核心容器,主要提供了组件的创建、装配、销毁的基本功能。(2) SpringContext:Spring上下文,基于Spring核心容器,扩展了核心容器,主要提供了事件处理、国际化等功能。(3) SpringAOP:提供了AOP编程的支持。(4) SpringDAO:提供了JDBC的支持、一种实现编程性和声明性的事务管理方法。(5) SpringORM:提供了对O/R mapping的支持,对Hibernate、JDBC等的再次封装。(6) SpringWeb:基于Spring上下文的,提供了 webApplication的容器,方便web的集成。(7) SpringWebMVC:提供了MVC的一个完整的实现。 二、 Spring的核心内容1. IOC (Inversion of control): 控制反转/依赖注入(1) IOC的概念:控制反转/依赖注入,组件之间的依赖关系由容器在运行时决定1) 组件:JavaBean2) 依赖关系:调用/包含3) 容器:Spring4) 控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系(2) IOC的优点:1) 代码的耦合度低2) 代码的维护性好3) 代码量少(3) IOC的核心-BeanFactory1) BeanFactory是所有容器的父接口,它提供了基本的对象的装配的支持2) XmlBeanFactory是他最常用的实现之一。3) 在Spring中,BeanFactory创建的各个实例称作Bean4) BeanFactory只有在客户端调用时才实例化对象,即调用getBean()时容器才会创建对应的组件的实例,在默认情况下返回的对象采用单例模式。getBean(“Bean的名称”)返回id所指向的对象注:Bean的名称:i Bean的名字不允许重复的ii Bean的名字有特殊字符,如:/5) BeanFactory创建Bean的三种方式:A 通过构造方法直接创建:B 通过静态工厂方法创建:C 通过非静态工厂方法创建:bean id=”factory” class=”factory class name”6) ApplicationContext A ApplicationContext是BeanFactory的子接口B 它扩展了BeanFactory的功能,它增加事件处理、国际化等支持C ClassPathXmlApplicationContext 是其最常用的实现之一它可以预先国际化Bean,只对scope=“singleton(单例)”初始化注:scope是Bean的一个属性(4) IOC类型(依赖注入的方式):1) 基于构造器的方式()注:index表示构造方法中的参数索引(第一个参数索引为0)type表示构造方法中参数的类型多个属性要写多个,并且顺序不能变2) Setter方法(推荐使用)其中,name属性的取值依setter方法名而3) 两种注入方式的区别:Constructor:可以在构建对象的同时把依赖关系也构建好,安全性高。但是必须对每一个属性都要赋值。Setter:如果对象的属性比较多,并且属性值并不是每一个都要赋值时使用Setter注入。创建完对象之后再通过set()方法进行属性的设定,(5) 设置属性时可选的标签1) value:基本类型(包装类型)或String类型属性的值/由Spring自动进行类型转换例:1字符自动转化为数值型(等价)2) ref:引用工厂中其它的Bean(对象装配)A 不要求Bean的定义在同一个配置文件中B 只能用在同一个配置文件中即local指向的Bean与当前Bean必须在同一个配置文件中C 直接将Bean的定义嵌套在另一个Bean的里面被嵌入的Bean不能被其他Bean访问内部Bean为外部Bean私有3) list:List或数组类型A 元素可以重复B 有序C 可以放置任意类型的元素D 支持泛型string1string24) set:Set类型(用法与list类似)A 元素不允许重复B 无序C 可以放置任意类型的元素D 支持泛型5) map:Map类型A Key只能是字符串B Value可以是任意类型some6) props:Properties类型,键值必须为String类型的value1value2(6) 自动装配:1) 让容器依据某种规则,自动将某个Bean注入到另一个Bean的属性中,一般用于项目的初级阶段(原型)注:只装配对象,不对基本类型和String装配2) autowire=“”A byName:匹配属性名与Bean的名字(指id=“)B byType:寻找配置文件,匹配属性类型与bean的类型(指class=“)成功就设置,如果匹配个数超过了一个,报错C Constructor:匹配构造器,看构造器的参数类型与Bean的类型是否一致,成功就设置,如果匹配的个数超过一个,报错D Autodetect:通过bean 类的自省机制(introspection)来决定是使用constructor 还是byType 方式进行自动装配。如果发现默认的构造器,那么将使用byType 方式。(7) 依赖检查: 1) 作用:检查Bean的属性是否完成依赖关系的注入2) 原因:防止出现空指针异常3) dependency-check=“A .simple : 只查看简单的类型是否完成依赖注入(基本类型和字符串)B .objects: 检查对象类型是否完成依赖注入C .all: 检查全部的类型是否完成依赖注入。D .none: 默认的设置,表示不检查依赖性 (8) 生命周期:实例化(调用缺省构造器)装配(给对象赋值) 实现BeanNameAware接口容器会将Bean的名字传给该对象容器会将BeanFactory传给该对象当容器关闭时清理资源特殊的接口,容器会自动检测该对象是否存在,如果存在会调用该对象的preinitialization和postinitialization两个方法来对其它对象进行后处理对象初始化:1)对象实现InitializingBean(侵入式)2)在Bean中实现init方法(推荐)如果Bean实现InitializingBean接口同时有init()容器先调用afterProperiesSet()在调用init()(9) 特殊装配1) 后处理Bean(不用再注册)A 接口:org.springframework.beans.factory.config.BeanPostProcessorB 使Spring对bean完成依赖注入之后,再补充一些后续操作, Spring容器会在每一个bean被初始化之前、之后分别执行实现了该接口的bean类的postProcessBeforeInitialization()方法和postProcessAfterInitialization()方法 2) Bean工厂后处理(只能在应用上下文中使用)A 接口:org.springframework.beans.factory.config.BeanFactoryPostProcessorB 实现该接口的Bean会被载入但没有被实例化前做一些特殊处理C Spring内部接口实现org.springframework.beans.factory.config.PropertyPlaceholderConfigurer做分散配置可将配置文件中属性值用“$key”形式表示,则会将其值替换成指定的属性文件中key所对应的value;D Spring实现类org.springframework.beans.factory.config.CustomEditorConfigurer做属性编辑,以字符串形式装配对象3) 国际化消息的支持:可通过ApplicationContext的getMessage()方法获得指定资源文件中的消息;配置如下:first/msg4) 事件监听A 自定义事件:继承ApplicationEventB 自定义监听器:实现ApplicationListener并注册C 发布事件,得到应用上下文:实现publishEvent(ApplicationEvent)(10) FatoryBean:用来创建Bean1) 静态工厂的方式:A 分类:B 编写工厂类(静态)C 配置文件配置 factory-method=工厂类里的方法名Test.java:public class Test public static void main(String args) ApplicationContext ac = new ClassPathXmlApplicationContext(day01factoryiocapplicationContext.xml);Car car = (Car) ac.getBean(car);car.play();2) 实例工厂:A 编写实例工厂B 配置:a 配置工厂b 配置产品2. AOP(Aspect-oriented programming)(1) AOP:面向层面/切面编程,将应用分解成切面与具体的业务逻辑模块,然后将切面透明的插入到业务逻辑模块当中,从而形成一个完整的程序。(2) AOP相关的概念:1) 目标对象(Target):就是被代理的对象,也就是具体的业务逻辑。比如OrderService2) 切面(Aspect):交叉业务逻辑3) 通知(Advice):切面的一个实现4) 连接点(Jointpoint):切面可以应用到目标对象的位置。位置:方法(一般用于方法前面)、属性(很少用于属性前面)5) 切入点(Pointcut):切面具体应用到哪些目标的哪些位置上6) 引入(Introduction):一种特殊的通知,再不修改目标类的条件下,可以动态的给目标类增加新的方法、属性7) 织入(Weaving):将切面透明的应用到(插入到)目标类,形成一个代理类的过程。注:Spring不支持属性织入(连接点),只支持运行时织入原因:Spring采用动态代理机制,编译时织入需要特殊的编译器8) Advisor:将Pointcut与Advice结合到一起(3) 代理的两种方式:1) 静态代理A. 针对每个具体类分别编写代理类;B. 针对一个接口编写一个代理类2) 动态代理只要求提供代理接口和目标对象,系统动态生成一个代理类(4) AOP的主要原理:动态代理(5) ProxyFactoryBean:用来创建代理对象1) interfaces of target bean implemented list可写多个切面 Bean的名(id)Bean的名(id) 注:用加粗的是不可改的他们是ProxyFactoryBean的方法或属性2)创建代理对象需指定的三要素:target:设定目标对象(只能是一个);proxyInterfaces:设定代理接口(目标对象所实现的接口);interceptorNames:设定拦截器的名字(各个advice或advisor bean的列表)(6) Spring常用的Advice(根据织入的时机不同而划分)1) Before Advice:在目标对象的方法执行之前加入行为(做拦截处理)A. 要实现的接口:org.springframework.aop.MethodBeforeAdviceB. 不能改返回值,不能改目标方法的流程,也不能中断流程的处理过程(除非抛异常)C. 在拦截的方法之前调用:public void before(Method arg0, Object arg1, Object arg2)a. Method arg0:被拦截的方法b. Object arg1:方法的参数c. Object arg2:被拦截的对象2) After Advice:在目标对象的方法执行之后加入行为;A. 要实现的接口:org.springframework.aop.AfterReturningAdviceB. 不能够改变目标方法的流程,也不能中断流程的处理过程(除非抛出异常)3) Throw Advice:在目标对象的方法发生异常时加入行为A. 要实现的接口:org.springframework.aop.ThrowsAdviceB. 当该通知处理完异常后,会简单地将异常再次抛出给目标调用方法C. 必须实现的方法:public void afterThrowing(异常e)目标方法抛出满足afterThrowing参数的异常就调用该方法4) Around Advice:在目标对象的方法执行前后加入行为A. 要实现的接口:ercept.MethodInterceptorB. 可以改变返回值,也可以改变流程C. 例:public Object invoke(MethodInvocation arg0) throws Throwable Object rst = null;System.out.println(loging.);rst = ceed();/ 执行目标对象的方法System.out.println(welcome to register!);return rst;注:MethodInvocation arg0:可以找到目标方法5)Introduction Advice:引入的行为(增加了可操作的方法)A.引入:动态的给一个类增加属性、方法B.步骤:a写一个接口IOtherdo Other(); b.写一个类实现IOther接口同时实现org.springframework.aop.support.DelegatingIntroductionInterceptor接口 c用DefaultIntroductionAdvisor包装IntroductionInterceptorIntroductionInterceptor会拦截方法调用,判断方法属于哪一个类型所属的方法,如果方法属于目标对象,则直接调用目标方法(return ceed(),如果方法不属于目标对象则调用IntroductorInterceptor对应的方法(return arg0.getMethod().invoke(this,arg0.getArguments())(7) 切入点(Pointcut):根据方法和类决定什么地方织入通知1) ClassFilter getClassFilter()返回ClassFilte对象,指定切面是否可以应用到某个目标对象上2) MethodMatcher getMethodMatcher()指定的切面应用在哪些方法上,指定切入点的类型(动态/静态切入点)A. boolean matches(Method m, class targetClass)返回ture表示切面可以用到该方法上B. Boolean isRuntime();返回ture为动态切入点 false为静态切入点C. Boolean matches(Method m, class targetClass,Object arg)只有当isRuntime()返回true被调用(动态切入点)3) 动态切入点:先判断参数值只有在满足某个条件的情况下才会应用切面到该方法。动态切入点会影响性能4) PointcutAdvisor:Pointcut定义了Advice的应用时机;在Spring中,使用PointcutAdvisor将Pointcut和Advice结合为一个对象A. NameMatchMethodPointcutAdvisor:可用来指定Advice所要应用的目标对象上的方法名称 do* B.PointcutAdvisor RegexpMethodPointcutAdvisor:可使用Regular expression定义Pointcut,在符合Regular expression的情况下应用Advice,其pattern属性用来指定所要符合的完整类名(包括 package名称)及方法名;定义该属性时可使用的符号包括:符号描述.符合任意一个字符+符合前一个字符一次或多次*符合前一个字符零次或多次转义字符,用来转义正则表达式中使用到的字符 .*do.* (8) AutoProxy:自动代理1)BeanNameAutoProxyCreator:根据bean的名字为其自动创建代理对象,bean工厂自动返回其代理对象:beanNameAdvice/Advisor Bean Name2)DefaultAdvisorAutoProxyCreator:自动将Advisor应用到符合Pointcut的目标对象上,只能与advisor配合使用.*do.*三、 数据访问1. 数据源配置:方式一:Spring内置实现 DriverManagerDataSourcecom.mysql.jdbc.Driverjdbc:mysql:/localhost:3306/springrootwindows方式二:DBCP提供的BasicDataSource方式三:JNDI数据源 (在讲解SSH整合时再说明)JNDI数据源:(mysql5,tomcat5.5) step1: server.xml: step2:context.xml(confcontext.xml):step3:applicationContext.xml: java:comp/env/jdbc/mydatasource 3、JDBC支持:step1: 配置数据源step2: 配置JdbcTemplate step3:配置DAO注意:查询时,使用RowMapper 4、hibernate支持:step1:配置数据源step2:配置sessionfactorylab6/Order.hbm.xmlorg.hibernate.dialect.MySQLDialecttruestep3:配置DAO注意:以上配置是要求dao 继承HibernateDaoSupport注意:如果使用hibernate.cfg.xml util/hibernate.cfg.xml 四、 Spring与Struts的整合1. 前提:必须在Web应用启动时,创建Spring的ApplicationContext实例方式:1)采用ContextLoaderListener来创建ApplicationContext:web.xmlcontextConfigLocationclasspath:applicationContext.xmlorg.springframework.web.context.ContextLoaderListener2)采用ContextLoaderPlugIn来创建ApplicationContext2、 方法:(1) 方式一:使用 Spring 的 ActionSupport 类整合 Structs
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 招商银行聊城市东昌府区2025秋招信息科技岗笔试题及答案
- 平安银行潍坊市奎文区2025秋招结构化面试经典题及参考答案
- 华夏银行南通市如皋市2025秋招笔试行测高频题及答案
- 广发银行保定市容城县2025秋招面试典型题目及参考答案
- 华夏银行芜湖市镜湖区2025秋招半结构化面试15问及话术
- 农发行襄阳市保康县2025秋招结构化面试15问及话术
- 公务员考试《常识》考前冲刺练习附答案详解(模拟题)
- 农发行宝鸡市岐山县2025秋招结构化面试经典题及参考答案
- 2023年度上海中医药大学单招《语文》自我提分评估及参考答案详解(培优)
- 平安银行乌鲁木齐市天山区2025秋招结构化面试经典题及参考答案
- 2025年专升本医学影像检查技术试题(含参考答案)解析
- 国家电网工作人员综合素质考试题库含答案
- 《互联网应用新特征》课件+2025-2026学年人教版(2024)初中信息技术七年级全一册
- 3.4 活动:电路创新设计展示说课稿 2025-2026学年教科版物理九年级上册
- 过节前安全培训课件
- 2025年彩色水泥行业研究报告及未来行业发展趋势预测
- 高二生物上学期第一次月考(安徽专用)(全解全析)
- 全息经络刮痧疗法(内部培训)课件
- 幼儿园绘本故事:《我爸爸》 PPT课件
- 学位英语试题及答案解释
- 采油工程第三次大作业-压裂第一题
评论
0/150
提交评论