ImageVerifierCode 换一换
格式:DOCX , 页数:45 ,大小:1.70MB ,
资源ID:3752991      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3752991.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Spring揭秘笔记.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Spring揭秘笔记.docx

1、Spring揭秘笔记Sping揭秘学习笔记2015年3月1日目录Q1. Spring总体结构 1Q2. IoC的基本概念 1Q3. Ioc注入的方式 13.1构造方法注入(constructorinjection) 13.2setter方法注入(setterinjection) 13.3接口注入(interfaceinjection)。 1Q4. IoCServiceProvider 2Q5. IoCServiceProvider如何管理对象间的依赖关系 2 直接编码方式 2 配置文件方式 2 元数据方式 2Q6. IoC容器和IoCServiceProvider的关系 2Q7. BeanFa

2、ctory和ApplicationContext 27.1BeanFactory。 27.2ApplicationContext 2Q8. BeanFactory的运作原理 38.1BeanFactory的初始化 38.2外部配置文件方式 4Q9. Beans的全局配置 4Q10. 继承注入 4Q11. bean的scope 411.1singleton 411.2prototype 411.3request、session和globalsession 5Q12. 自定义scope类型 5Q13. 工厂方法与FactoryBean 513.1静态工厂方法 513.2非静态工厂方法(Instan

3、ceFactoryMethod) 513.3FactoryBean 5Q14. 使用BeanFactoryAware接口获得beanFactory 6Q15. 使用ObjectFactoryCreatingFactoryBean 6Q16. 方法替换 7Q17. 插手“容器的启动” 717.1PropertyPlaceholderConfigurer 717.2PropertyOverrideConfigurer 717.3CustomEditorConfigurer 7Q18. Bean的生命周期 9Q19. Spring的Aware接口 919.1针对BeanFactory类型的容器 91

4、9.2针对ApplicationContext类型的容器 9Q20. BeanPostProcessor 1020.1将自定义的BeanPostProcessor注册到容器 10Q21. 插手“Bean的生灭” 1021.1InitializingBean和init-method 1021.2DisposableBean与destroy-method 10Q22. 统一资源加载策略 1122.1URL的问题 1122.2Spring中的Resource 1122.3ResourceLoader更广义的URL 11Q23. ApplicationContext与ResourceLoader 12

5、23.1Resource类型的注入 12Q24. Java国际化信息支持简介 13Q25. Spring国际化支持 1325.1可用的MessageSource实现 14Q26. Java事件发布概述 14Q27. Spring的容器内事件发布类结构分析 15Q28. Spring容器内事件发布的应用 16Q29. 使用ApplicationContext加载多个配置文件 16Q30. 注解版的自动绑定 1730.1Xml文件形式的自动绑定回顾 1730.2Autowired 1730.3实现原理 1730.4Qualifier 1730.5使用JSR250标注依赖注入关 17Q31. 启用注

6、解的简单方法 17Q32. classpath-scanning 18Q1. Spring总体结构Q2. IoC的基本概念InversionofControl,中文通常翻译为“控制反转”,它还有一个别名叫做依赖注入(DependencyInjection)。当某一个类需要依赖其他类工作时,不需要new对象而可以通过多种方式注入进来。IoC是一种可以帮助我们解耦各业务对象间依赖关系的对象绑定方式!Q3. Ioc注入的方式3.1 构造方法注入(constructorinjection)这种注入方式的优点就是,对象在构造完成之后,即已进入就绪状态,可以马上使用。缺点就是,当依赖对象比较多的时候,构造

7、方法的参数列表会比较长。3.2 setter方法注入(setterinjection)因为方法可以命名,所以setter方法注入在描述性上要比构造方法注入好一些。缺点当然就是对象无法在构造完成后马上进入就绪状态。3.3 接口注入(interfaceinjection)。从注入方式的使用上来说,接口注入是现在不甚提倡的一种方式,基本处于“退役状态”。因为它强制被注入对象实现不必要的接口,带有侵入性。而构造方法注入和setter方法注入则不需要如此。 使用的setter方法注入和使用可以同时使用Q4. IoCServiceProviderIoCServiceProvider在这里是一个抽象出来的概

8、念,它可以指代任何将IoC场景中的业务对象绑定到一起的实现方式。它可以是一段代码,也可以是一组相关的类,甚至可以是比较通用的IoC框架或者IoC容器实现。IoCServiceProvider的职责:业务对象的构建管理和业务对象间的依赖绑定。Q5. IoCServiceProvider如何管理对象间的依赖关系5.1 直接编码方式5.2 配置文件方式5.3 元数据方式Q6. IoC容器和IoCServiceProvider的关系Spring的IoC容器和IoCServiceProvider所提供的服务之间存在一定的交集,二者的关系如图所示。Q7. BeanFactory和ApplicationCo

9、ntext7.1 BeanFactory。基础类型IoC容器,提供完整的IoC服务支持。默认采用延迟初始化策略(lazy-load)/Spring4.1废弃BeanFactorycontainer=newXmlBeanFactory(newClassPathResource(配置文件路径);BeanFactorycontainer=newClassPathXmlApplicationContext(配置文件路径);BeanFactorycontainer=newFileSystemXmlApplicationContext(配置文件路径);7.2 ApplicationContextAppli

10、cationContext在BeanFactory的基础上构建,是相对比较高级的容器实现,除了拥有BeanFactory的所有支持,ApplicationContext除了拥有BeanFactory支持的所有功能之外,还进一步扩展了基本容器的功能,包括BeanFactoryPostProcessor、BeanPostProcessor以及其他特殊类型bean的自动识别、容器启动后bean实例的自动初始化、国际化的信息支持、容器内事件发布等。使用立即初始化策略。以下几个常用的实现:FileSystemXmlApplicationContextClassPathXmlApplicationCont

11、extXmlWebApplicationContextQ8. BeanFactory的运作原理8.1 BeanFactory的初始化/BeanDefinition代表Bean的定义AbstractBeanDefinitionnewsProvider=newRootBeanDefinition(FXNewsProvider.class,true);指定依赖关系/1.可以通过构造方法注入方式ConstructorArgumentValuesargValues=newConstructorArgumentValues();argValues.addIndexedArgumentValue(0,new

12、sListener);argValues.addIndexedArgumentValue(1,newsPersister);newsProvider.setConstructorArgumentValues(argValues);/2.或者通过setter方法注入方式MutablePropertyValuespropertyValues=newMutablePropertyValues();propertyValues.addPropertyValue(newpropertyValue(newsListener,newsListener);newsProvider.setPropertyVal

13、ues(propertyValues);DefaultListableBeanFactoryregistry=newDefaultListableBeanFactory();registry.registerBeanDefinition(djNewsProvider,newsProvider);(BeanFactory)registry.getBean(newsListener)DefaultListableBeanFactory实现了BeanDefinitionRegistry接口和BeanFactory接口BeanDefinition放入BeanDefinitionRegistry,实现元

14、信息配置,再通过BeanFactory获得完成职责。8.2 外部配置文件方式BeanDefinitionReader的相应实现类负责将相应的配置文件内容读取并映射到BeanDefinition,然后将映射后的BeanDefinition注册到一个BeanDefinitionRegistry,之后,BeanDefinitionRegistry即完成Bean的注册和加载。1. Properties配置格式的加载PropertiesBeanDefinitionReader类用于Properties格式配置文件的加载2. XML配置格式的加载XmlBeanDefinitionReader类用于XML格

15、式配置文件的加载3. 注解方式Q9. Beans的全局配置default-lazy-init。其值可以指定为true或者false,默认值为false。用来标志是否对所有的进行延迟初始化。default-autowire。可以取值为no、byName、byType、constructor以及autodetect。默认值为no,如果使用自动绑定的话,用来标志全体bean使用哪一种默认绑定方式。default-dependency-check。可以取值none、objects、simple以及all,默认值为none,即不做依赖检查。default-init-method。如果所管辖的按照某种规则

16、,都有同样名称的初始化方法的话,可以在这里统一指定这个初始化方法名,而不用在每一个上都重复单独指定。default-destroy-method。与default-init-method相对应,如果所管辖的bean有按照某种规则使用了相同名称的对象销毁方法,可以通过这个属性统一指定。Q10. 继承注入Q11. bean的scope11.1 singleton标记为拥有singletonscope的对象定义,在Spring的IoC容器中只存在一个实例,所有对该对象的引用将共享这个实例。标记为singleton的bean是由容器来保证这种类型的bean在同一个容器中只存在一个共享实例;而Singl

17、eton模式则是保证在同一个Classloader中只存在一个这种类型的实例。11.2 prototype针对声明为拥有prototypescope的bean定义,容器在接到该类型对象的请求的时候,会每次都重新生成一个新的对象实例给请求方。11.3 request、session和globalsessionQ12. 自定义scope类型publicinterfaceScope Objectget(Stringname,ObjectFactoryobjectFactory); Objectremove(Stringname); voidregisterDestructionCallback(St

18、ringname,Runnablecallback); StringgetConversationId();Q13. 工厂方法与FactoryBean提供一个工厂类来实例化具体的接口实现类,这样,主体对象只需要依赖工厂类,具体使用的实现类有变更的话,只是变更工厂类,而主体对象不需要做任何变动。13.1 静态工厂方法13.2 非静态工厂方法(InstanceFactoryMethod)因为工厂方法为非静态的,我们只能通过某个NonStaticBarInterfaceFactory实例来调用该方法(哦,错了,是容器来调用),那么也就有了如下的配置内容: 13.3 FactoryBean一种可以扩展

19、容器对象实例化逻辑的接口,请不要将其与容器名称BeanFactory相混淆。FactoryBean,其主语是Bean,定语为Factory,也就是说,它本身与其他注册到容器的对象一样,只是一个Bean而已,只不过,这种类型的Bean本身就是生产对象的工厂(Factory)。publicclassNextDayDateFactoryBeanimplementsFactoryBean publiccObjectgetObject()throwsException returnnewDateTime().plusDays(1); publicClassgetObjectType() returnDa

20、teTime.class; publicBooleanisSingleton() returnfalse; Spring容器内部许多地方了使用FactoryBean:JndiObjectFactoryBean、LocalSessionFactoryBean、SqlMapClientFactoryBean ProxyFactoryBean、TransactionProxyFactoryBeanQ14. 使用BeanFactoryAware接口获得beanFactorypublicclassMockNewsPersisterimplementsIFXNewsPersister,BeanFactor

21、yAware privateBeanFactorybeanFactory; publicvoidsetBeanFactory(BeanFactorybf)throwsBeansException this.beanFactory=bf; Q15. 使用ObjectFactoryCreatingFactoryBeanObjectFactoryCreatingFactoryBean是Spring提供的一个FactoryBean实现,它返回一个ObjectFactory实例。从ObjectFactoryCreatingFactoryBean返回的这个ObjectFactory实例可以为我们返回容器管

22、理的相关对象。实际上,ObjectFactoryCreatingFactoryBean实现了BeanFactoryAware接口,它返回的ObjectFactory实例只是特定于与Spring容器进行交互的一个实现而已。使用它的好处就是,隔离了客户端对象对BeanFactory的直接引用。publicclassMockNewsPersisterimplementsIFXNewsPersister privateObjectFactorynewsBeanFactory; publicvoidpersistNews(FXNewsBeanbean) persistNews(); publicvoid

23、persistNews() System.out.println(persistbean:+getNewsBean(); publicFXNewsBeangetNewsBean() returnnewsBeanFactory.getObject(); publicvoidsetNewsBeanFactory(ObjectFactorynewsBeanFactory) this.newsBeanFactory=newsBeanFactory; 相关配置 Q16. 方法替换与方法注入只是通过相应方法为主体对象注入依赖对象不同,方法替换更多体现在方法的实现层面上,它可以灵活替换或者说以新的方法实现覆

24、盖掉原来某个方法的实现逻辑。publicclassFXNewsProviderMethodReplacerimplementsMethodReplacer privatestaticfinaltransientLoglogger=LogFactory.getLog(FXNewsProviderMethodReplacer.class); publicObjectreimplement(Objecttarget,Methodmethod,Objectargs)throwsThrowable logger.info(beforeexecutingmethod+method.getName()+on

25、Object+target.getClass().getName()+.); System.out.println(sorry,Wewilldonothingthistime.); logger.info(endofexecutingmethod+method.getName()+onObject+target.getClass().getName()+.); returnnull; Q17. 插手“容器的启动”Spring提供了一种叫做BeanFactoryPostProcessor的容器扩展机制。该机制允许我们在容器实例化相应对象之前,对注册到容器的BeanDefinition所保存的信息

26、做相应的修改。Spring已经提供了几个现成的BeanFactoryPostProcessor实现类:17.1 PropertyPlaceholderConfigurer用类替换配置文件中的$参数17.2 PropertyOverrideConfigurer用来覆盖配置文件中的属性17.3 CustomEditorConfigurerCustomEditorConfigurer是另一种类型的BeanFactoryPostProcessor实现,它只是辅助性地将后期会用到的信息注册到容器,对BeanDefinition没有做任何变动。PropertyEditor用来根据该对象类型取得与其相对应的

27、PropertyEditor来做具体的类型转换。下是这些Spring提供的部分PropertyEditor:StringArrayPropertyEditor、ClassEditor、FileEditor、LocaleEditor、PatternEditor。 自定义PropertyEditor。publicclassDatePropertyEditorextendsPropertyEditorSupport privateStringdatePattern; Override publicvoidsetAsText(Stringtext)throwsIllegalArgumentException DateTi

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1