




免费预览已结束,剩余9页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
IOC和spring基本配置详解 对于IoC的一些知识点,相信大家都知道他在Spring框架中所占有的地位,应该可以算的上是核心之一吧,所以IOC是否理解清楚,决定了大家对Spring整个框架的理解Ioc的理解spring的两个核心概念:一个是控制反转IoC,也可以叫做依赖注入DI。还有一个是面向切面编程AOP。控制反转:当某个java对象需要(依赖)另一个java对象时,不是自身直接创建依赖对象,而是由实现IoC的容器(如spring框架的IoC容器)来创建,并将它注入需要这个依赖对象的java对象中。spring的容器spring管理的基本单元是Bean,在spring的应用中,所有的组件都是一个个的Bean,它可以是任何的java对象。spring负责创建这些Bean的实例。并管理生命周期。而spring框架是通过其内置的容器来完成Bean的管理的,Bean在spring的容器中生存着,使用时只需要通过它提供的一些方法从其中获取即可。spring的容器有两个接口:BeanFactory和ApplicationContext这两个接口的实例被陈为spring的上下文。javaview plaincopyprint?1. ApplicationContextac=newClassFathXmlApplicationContext(app*.xml);2. AccountServiceaccountService=(AccountService)ac.getBean(accountServiceImpl);注:由于ApplicationContext是基于BeanFactory之上的,所以,一般ApplicationContext功能比较强大,建议使用ApplicationContext经常用到的三个实现:1.ClassPathXmlApplicationContext:从类路径中的XML文件载入上下文定义信息。把上下文定义文件当成类路径资源。2.FileSystemXmlApplicationContext:从文件系统中的XML文件载入上下文定义信息。3.XmlWebApplicationContext:从Web系统中的XML文件载入上下文定义信息。一:spring的依赖注入1)、构造器注入htmlview plaincopyprint?1. 3. 5. 6. 7. 注:这种注入方式很少用,如果是注入对象一般为上例注入,但有时要注入基本数据类型,一般用下面方法注入htmlview plaincopyprint?1. 2. helloworld!3. 如果构造方法不只一个参数时,应指明所注入参数的索引或者数据类型,例如:htmlview plaincopyprint?1. 2. sunDriver3. 4. 5. jdbc:odbc:School6. 2)、设值(set方法)注入htmlview plaincopyprint?1. 3. 5. 6. 7. 注:相当于调用setAccountDaoImpl方法,把值设为accoutDaoImpl3)接口注入(很少用)二:xml装配Bean属性含义1.id:指定该Bean的唯一标识。2.class:指定该Bean的全限定名。3.name:为该Bean指定一到多个别名。多个别名可以用“,”和“;”分割。4.autowire:指定该Bean的属性的装配方式。所谓自动装配是指在标签中不用指定其依赖的BEAN,而是通过配置的自动装配来自动注入依赖的BEAN,这种做法让我们的配置更加简单1)no:不使用自动装配。必须通过ref元素指定依赖,这是默认设置。由于显式指定协作者可以使配置更灵活、更清晰,因此对于较大的部署配置,推荐采用该设置。而且在某种程度上,它也是系统架构的一种文档形式。htmlview plaincopyprint?1. 3. 5. 6. 备注:有property属性指定ref2)byName:根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配。例如,在bean定义中将autowire设置为byname,而该bean包含master属性(同时提供setMaster(.)方法),Spring就会查找名为master的bean定义,并用它来装配给master属性。备注:没有property属性3)byType:如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配。如果存在多个该类型的bean,那么将会抛出异常,并指出不能使用byType方式进行自动装配。若没有找到相匹配的bean,则什么事都不发生,属性也不会被设置。如果你不希望这样,那么可以通过设置dependency-check=objects让Spring抛出异常。备注:spring3.0以上不抛异常。备注:没有property属性4)Constructor:与byType的方式类似,不同之处在于它应用于构造器参数。如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。备注:没有property属性5)autodetect:通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。如果发现默认的构造器,那么将使用byType方式。5.scope:指定该Bean的生存范围scope用来声明IOC容器中的对象应该处的限定场景或者说该对象的存活空间,即在IOC容器在对象进入相应的scope之前,生成并装配这些对象,在该对象不再处于这些scope的限定之后,容器通常会销毁这些对象。1)singleton类型的bean定义,在一个容器中只存在一个实例,所有对该类型bean的依赖都引用这一单一实例2)scope为prototype的bean,容器在接受到该类型的对象的请求的时候,会每次都重新生成一个新的对象给请求方,虽然这种类型的对象的实例化以及属性设置等工作都是由容器负责的,但是只要准备完毕,并且对象实例返回给请求方之后,容器就不在拥有当前对象的引用,请求方需要自己负责当前对象后继生命周期的管理工作,包括该对象的销毁3)request,session和globalsession这三个类型是spring2.0之后新增的,他们只适用于web程序,通常是和XmlWebApplicationContext共同使用request:Spring容器,即XmlWebApplicationContext会为每个HTTP请求创建一个全新的RequestPrecessor对象,当请求结束后,该对象的生命周期即告结束sessionSpring容器会为每个独立的session创建属于自己的全新的UserPreferences实例,他比requestscope的bean会存活更长的时间,其他的方面真是没什么区别。globalsession:globalsession只有应用在基于porlet的web应用程序中才有意义,他映射到porlet的global范围的session,如果普通的servlet的web应用中使用了这个scope,容器会把它作为普通的session的scope对待。6.init-method:指定该Bean的初始化方法。destroy-method:指定该Bean的销毁方法。这个就像servlet中init和destroy方法一样,只不过这里在配置文件配置的7.abstract:指定该Bean是否为抽象的。如果是抽象的,则spring不为它创建实例。8.parent如果两个Bean的属性装配信息很相似,那么可以利用继承来减少重复的配置工作。三:装配Bean的各种类型属性值1.简单类型属性值的装配htmlview plaincopyprint?1. 2. 3. 4. 225. 6. 2.引用其他Bean的装配htmlview plaincopyprint?1. 2. .3. 4. 5. 6. 7. 另外一种不常使用的配置方式是在property元素中嵌入一个bean元素来指定所引用的Bean.htmlview plaincopyprint?1. 2. .3. 4. 5. 6. 7. 9. 10. 3.集合的装配其实集合的装配并不是复杂,反而感觉到很简单,用一个例子来说明问题吧:javaview plaincopyprint?1. packagecom.bebig.dao.impl;2. importjava.util.List;3. importjava.util.Map;4. importjava.util.Properties;5. importjava.util.Set;6. importcom.bebig.dao.UserDAO;7. importcom.bebig.model.User;8. publicclassUserDAOImplimplementsUserDAO9. privateSetsets;10. privateListlists;11. privateMapmaps;12. privatePropertiesprops;13. publicSetgetSets()14. returnsets;15. 16. publicvoidsetSets(Setsets)17. this.sets=sets;18. publicListgetLists()19. returnlists;20. publicvoidsetLists(Listlists)21. this.lists=lists;22. publicMapgetMaps()23. returnmaps;24. 25. publicvoidsetMaps(Mapmaps)26. this.maps=maps;27. 28. publicPropertiesgetProps()29. returnprops;30. 31. publicvoidsetProps(Propertiesprops)32. ps=props;33. 34. publicvoidsave(Useru)35. System.out.println(ausersaved!);36. 37. Override38. publicStringtoString()39. returnsets.size:+sets.size()+lists.size:+lists.size()40. +maps.size:+maps.size()+props.size:+props.size();41. 42. 43. 配置如下:htmlview plaincopyprint?1. 2. 5. 6. 7. 8. 9. 10. 111. 212. 13. 14. 15. 16. 17. a18. b19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. haha32. hi33. 34. 35. 36. 38. 39. 40. 41. 42. 43. !-44. 四:Springbean生命周期 在传统的Java应用中,Bean的生命周期非常简单。Java的关键词new用来实例化Bean(或许他是非序列化的)。这样就够用了。相反,Bean的生命周期在Spring容器中更加细致。理解SpringBean的生命周期非常重要,因为你或许要利用Spring提供的机会来订制Bean的创建过程。bean生命周期1.容器寻找Bean的定义信息并且将其实例化。2.受用依赖注入,Spring按照Bean定义信息配置Bean的所有属性。3.如果Bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法传递Bean的ID。4.如果Bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身。5.如果BeanPostProcessor和Bean关联,那么它们的postProcessBeforeInitialzation()方法将被调用。6.如果Bean指定了init-method方法,它将被调用。7.最后,如果有BeanPsotProcessor和Bean关联,那么它们的postProcessAfterInitialization()方法将被调用。到这个时候,Bean已经可以被应用系统使用了,并且将被保留在BeanFactory中知道它不再需要。有两种方法可以把它从BeanFactory中删除掉。1.如果Bean实现了DisposableBean接口,destory()方法被调用。2.如果指定了订制的销毁方法,就调用这个方法。Bean在Spring应用上下文的生命周期与在Bean工厂中的生命周期只有一点不同,唯一不同的是,如果Bean实现了ApplicationContextAwre接口,setApplicationContext()方法被调用。只有singleton行为的bean接受容器管理生命周期。non-singleton行为的bean,Spring容器仅仅是new的替代,容器只负责创建。对于singletonbean,Spring容器知道bean何时实例化结束,何时销毁,Spring可以管理实例化结束之后,和销毁之前的行为,管理bean的生命周期行为主要未如下两个时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园防雷安全知识培训课件
- 校园防侵害安全知识培训课件
- 北大荒专业知识培训课件
- 散打理论考试试题及答案
- 残疾汽车考试题及答案
- 农行银行面试题及答案
- 动物防疫考试题及答案
- 企业形象设计试题及答案
- 煤矿顶板考试题及答案
- 有机2考试题及答案
- 拆除防火门施工方案
- 企业信息系统管理制度
- 骨科疾病临床诊疗思维
- 保安公司公司管理制度
- YY 0267-2025血液净化体外循环系统血液透析器、血液透析滤过器、血液滤过器及血液浓缩器用体外循环血路/液路
- 【国家】2024年国家工业信息安全发展研究中心招聘40人笔试附带答案详解析
- 2025年北京市东城区中考语文一模试卷
- 高空作业考证试题及答案
- 江山市虎鼎环保科技有限公司飞灰脱钙及水洗氯化物品质提升技改项目环境影响报告表
- 锑化物超晶格长波红外探测器:从制备到性能优化的深度剖析
- 太空交直流混合微电网:电能变换与保护技术的深度剖析
评论
0/150
提交评论