游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

Spring控制反转和依赖注入

  控制反转的类型
  控制反转(IOC)旨在提供一种更简单的机制,来设置组件的依赖项,并在整个生命周期管理这些依赖项。通常,控制反转可以分成两种子类型:依赖注入(DI)和依赖查找(DL),这些子类型各自又可以被进一步分解为IOC服务的具体实现1。依赖查找1。1依赖拉取
  依赖拉取(DependencyPull),即根据需要,从注册表中提取依赖项,以下代码显示了基于Spring的依赖拉取publicclassDependencyPull{publicstaticvoidmain(String〔〕args){ClassPathXmlApplicationContextctxnewClassPathXmlApplicationContext(springappcontext。xml);ctx。getBean(renderer,MessageRenderer。class);}}1。2上下文依赖查找
  上下文依赖查找(contextualizeddependencylookup,CDL),同样属于依赖查找的子类型,和依赖拉取有点类似,但在CDL中,查找是针对管理资源的容器执行的,这个容器通常由应用程序服务器或框架(Tomcat、JBoss、Spring)提供,比如以下代码显示了一个提供依赖查找服务的容器接口publicinterfaceContainer{根据key获取相应的依赖项ObjectgetDependency(Stringkey);}
  CDL通过让组件实现以下代码接口来进行工作publicinterfaceManagedComponent{voidperformLookup(Containercontainer);}
  组件需要实现该接口,当容器准备好将依赖项传递给组件时,会依次调用每个组件的performLookup()方法,然后组件就可以使用Container接口查找所需的依赖项publicclassContextualizedDependencyLookupimplementsManagedComponent{privateDependencydependency;OverridepublicvoidperformLookup(Containercontainer){this。dependency(Dependency)container。getDependency(myDependency);}OverridepublicStringtoString(){returndependency。toString();}}2。依赖注入2。1构造函数注入
  当在组件的构造函数中提供依赖项时,就会发生构造函数依赖注入publicclassConstructorInjection{privateDependencydependency;publicConstructorInjection(Dependencydependency){this。dependencydependency;}OverridepublicStringtoString(){returndependency。toString();}}2。2setter函数注入
  Ioc容器通过JavaBean样式的setter方法注入组件的依赖项publicclassSetterInjection{privateDependencydependency;publicvoidsetDependency(Dependencydependency){this。dependencydependency;}OverridepublicStringtoString(){returndependency。toString();}}
  在Spring中,还支持另一种被称为字段注入(fieldinjection)的注入类型,在后面学习使用Autowire注解进行自动装配时将介绍该注入类型Spring中的控制反转1。Bean和BeanFactory
  Spring的依赖注入容器的核心是BeanFactory,它负责管理组件,包括依赖项以及它们的生命周期。如果我们想获得一个组件(Bean),就必须创建一个实现了BeanFactory接口的实例,并对其进行配置
  虽然BeanFactory可以通过编程方式配置,但更常见的做法是使用某种配置文件在外部对其进行配置。Bean配置可以由实现BeanDefinition接口的类的实例来表示,对于任何实现了BeanDefinitionReader接口的BeanFactory实现类来说,都可以使用PropertiesBeanDefinitionReader或XmlBeanDefinitionReader从配置文件读取BeanDefinition数据
  定义一组接口:publicinterfaceOracle{Stringoutput();}publicclassOracleImplimplementsOracle{OverridepublicStringoutput(){returnhelloworld;}}
  接下来我们来看一看,Spring的BeanFactory如何被初始化并用于获取Bean实例publicclassXmlConfigWithBeanFactory{publicstaticvoidmain(String〔〕args){DefaultListableBeanFactory是Spring提供的两个主要BeanFactory实现之一DefaultListableBeanFactoryfactorynewDefaultListableBeanFactory();XmlBeanDefinitionReaderrdrnewXmlBeanDefinitionReader(factory);使用XmlBeanDefinitionReader从XML文件读取BeanDefinition信息rdr。loadBeanDefinitions(newClassPathResource(springxmlbeanfactoryconfig。xml));使用在XML配置文件中配置的名称oracle来获取beanOracleoracle(Oracle)factory。getBean(oracle);System。out。println(oracle。getInfo());}}lt;?xmlversion1。0encodingUTF8?beansxmlnshttp:www。springframework。orgschemabeansxmlns:xsihttp:www。w3。org2001XMLSchemainstancexsi:schemaLocationhttp:www。springframework。orgschemabeanshttp:www。springframework。orgschemabeansspringbeans。xsdbeanidoraclenameoracleclasscom。example。OracleImplbeans
  ApplicationContext接口是BeanFactory的一个扩展,除了DI服务外,还提供其他如事务和AOP等服务。在开发基于Spring的应用程序时,建议通过ApplicationContext接口与Spring交互2。设置Spring配置2。1XML配置
  对于XML配置,需要声明应用程序需要的由Spring提供的名称空间基础信息,下面所示配置仅声明用于定义bean的名称空间lt;?xmlversion1。0encodingUTF8?beansxmlnshttp:www。springframework。orgschemabeansxmlns:xsihttp:www。w3。org2001XMLSchemainstancexmlns:phttp:www。springframework。orgschemapxsi:schemaLocationhttp:www。springframework。orgschemabeanshttp:www。springframework。orgschemabeansspringbeans。xsdbeanidproviderclasscom。example。HelloWorldMessageProviderbeanidrenderclasscom。example。StandardOutMessageRenderp:messageProviderrefproviderbeans2。2注解配置
  要想在应用程序使用Spring的注解支持,需要在XML配置中声明lt;?xmlversion1。0encodingUTF8?beansxmlnshttp:www。springframework。orgschemabeansxmlns:xsihttp:www。w3。org2001XMLSchemainstancexmlns:contexthttp:www。springframework。orgschemacontextxsi:schemaLocationhttp:www。springframework。orgschemabeanshttp:www。springframework。orgschemabeansspringbeans。xsdhttp:www。springframework。orgschemacontexthttp:www。springframework。orgschemacontextspringcontext。xsdcontext:componentscanbasepackagecom。examplebeans
  标记告诉Spring扫描代码,从而找到Component等注解注入的bean,以及支持在指定包(及其所有子包)下使用Autowire等注解的bean2。3Java配置
  配置类使用Configuration注解,并包含用Bean注解的方法,这些方法由IOC容器直接调用来实例化bean,bean名称与用于创建它的方法的名称相同ConfigurationpublicclassHelloWorldConfiguration{BeanpublicMessageProviderprovider(){returnnewHelloWorldMessageProvider();}BeanpublicMessageRenderrender(){StandardOutMessageRenderrendernewStandardOutMessageRender();render。setMessageProvider(provider());returnrender;}}
  如果想从该类中读取配置信息,需要一个不同的ApplicationContext实现publicclassHelloWorldSpringAnnotated{publicstaticvoidmain(String〔〕args){AnnotationConfigApplicationContextctxnewAnnotationConfigApplicationContext(HelloWorldConfiguration。class);MessageRenderrenderctx。getBean(render,MessageRender。class);render。render();}}3。setter注入
  使用XML配置来配置setter注入,需要在标记下指定标记,为其注入一个依赖项beansxmlnshttp:www。springframework。orgschemabeansxmlns:xsihttp:www。w3。org2001XMLSchemainstancexmlns:phttp:www。springframework。orgschemapxsi:schemaLocationhttp:www。springframework。orgschemabeanshttp:www。springframework。orgschemabeansspringbeans。xsdbeanidproviderclasscom。example。HelloWorldMessageProviderbeanidrenderclasscom。example。StandardOutMessageRenderpropertynamemessageProviderrefproviderbeanbeans
  如果使用注解,只需要向setter方法添加一个Autowired注解Service(render)publicclassStandardOutMessageRenderimplementsMessageRender{。。。OverrideAutowiredpublicvoidsetMessageProvider(MessageProvidermessageProvider){this。messageProvidermessageProvider;}}4。构造函数注入publicclassConfigurableMessageProviderimplementsMessageProvider{privateStringmessage;publicConfigurableMessageProvider(Stringmessage){this。messagemessage;}OverridepublicStringgetMessage(){returnnull;}}
  使用XML方式注入lt;?xmlversion1。0encodingUTF8?beansxmlnshttp:www。springframework。orgschemabeansxmlns:xsihttp:www。w3。org2001XMLSchemainstancexmlns:chttp:www。springframework。orgschemacxsi:schemaLocationhttp:www。springframework。orgschemabeanshttp:www。springframework。orgschemabeansspringbeans。xsdbeanidoraclenameoracleclasscom。example。OracleImpl!使用constructorarg标记beanidmessageProviderclasscom。example。ConfigurableMessageProviderconstructorargvaluehelloworldbean!使用c名称空间beanidproviderclasscom。example。ConfigurableMessageProviderc:messagehelloworldbeans
  使用注解方式ServicepublicclassConfigurableMessageProviderimplementsMessageProvider{privateStringmessage;AutowiredpublicConfigurableMessageProvider(Value(helloworld)Stringmessage){this。messagemessage;}OverridepublicStringgetMessage(){returnnull;}}

看到有人说一加8可以闭着眼睛买,有那么好吗?一加的座右铭不将就,一加手机目标用户是追求品质生活的年轻用户,在每个工艺细节都尽量做到最好。一加8可以闭着眼睛买,是有一定道理的。下文具体说一说。一加8的配置屏幕:……文化艺术AR呈现标准发布为全球文化产业数字化发展贡献中国智慧人民网北京8月26日电(记者刘佳)近日,由我国牵头研究制订的文化艺术增强现实呈现技术需求及应用框架标准(以下简称文化艺术AR呈现标准)由国际电信联盟正式发布成为国际标准(标准编……开发电商的几种方法!有你需要的淘宝店铺吗?每当我们谈到电商二字,总会认为电商就是十分挣钱的活;有眼光,有脑子的人玩的东西。错啦!有脑子的人在从事国防科技去了,有眼光的人炒股去了。现在我就先来梳理一下电商的几种相对成熟的……华为P60Pro概念图3英寸副屏2亿主摄,5000毫安电池配华为P50Pro已经发布,尽管不支持5G,但全新外观以及强大的计算摄影,仍然吸引了很多消费者,在DXO屏幕与影像榜单中,华为P50Pro都排在了第一的位置,由此可见华为P50P……2021胡润世界500强发布47家中国上榜企业总价值36万亿智通财经APP获悉,胡润研究院携手嘉兴市人民政府、嘉兴经济技术开发区今日联合发布《2021嘉兴胡润世界500强》称,苹果(AAPL。US)公司以15。8万亿价值蝉联胡润世界50……孟晚舟最后审判到期,法官暗箱操作被抓现行!引渡是否有转机?8月12日,华为公司副董事长、首席财务官孟晚舟引渡案再次开庭,并进入了最后的庭审阶段。此次庭审地选在了温哥华的加拿大不列颠哥伦比亚省高等法院,按照规定计划,这次庭审应该是从8月……2小时近百万粉丝已参与!是否出售10特斯拉股票吗?马斯克发起FX168财经报社(北美)讯周六(11月6日),特斯拉首席执行官埃隆马斯克(ElonMusk)要求他的数百万推特粉丝决定他持有的特斯拉股份的未来。马斯克回应了外界对他逃税……缤越欢迎垂询让利高达9000元【福田吉利深意店】缤越现车限时优惠,可试乘试驾缤越现车在店,购车可享多重优惠方案:零息方案:30首付2年免息;50至高3年0息超长期限超低月供方案:首付50,……刚上市就成了年轻人ampampquot真爱ampampquo朝九晚五的生活已磨平了我们心中的棱角,下班和周末闲暇时只想在家宅着。但仍会在刷抖音时兴起自驾去踏青的兴头,既然是去野外,自然少不了越野车。说起越野车,大家心中的第一印象就……从技术到服务,思必驰智能语音方案深化loT布局根据艾瑞咨询的数据预计,到2022年全球消费级IoT硬件销售额将达到15502亿美元;智能音箱由于其自然、快捷的交互特征,成为IoT入口,在2020年国内智能音箱销售规模将超过……自带66W超级快充华为nova8系列为创作灵感加buff随着冬天的渐入佳境,天气也是一天比一天冷了,但是寒冷的天气并不能够影响手机厂商们发布新品的决心,12月23日,一款专业Vlog手机华为nova8系列正式发布。本次的华为nova……AppStore限免Cineon物品备忘录宇宙战线AR等,共在今天限免的iOS限免应用中,波老师精选了以下4款限免应用,1款限免游戏。复制logo上方名字即可前往AppStore下载。如遇恢复原价,则表示限免已结束,请谨慎下载。具……
敢与戴森PK,原里光能无线吹风机实力如何?在吹风机领域,戴森近几年来备受关注,新品面世总会受到全球广泛关注,戴森最大卖点在于外观创新,从外观设计和内部结构来看,戴森吹风机都十分另类。戴森电吹风的机身延续了其无叶风扇设计……重磅亮相十二款新车长城汽车2021成都车展现场人气爆棚8月29日,第二十四届成都国际汽车展览会正式开幕。长城汽车旗下哈弗、坦克、魏牌、欧拉及长城皮卡五大整车品牌集结登场,重磅亮相十二款全新车型,一展全球化科技出行公司焕新实力。车展……移动电源怎么做REACHSVHC认证,REACHSVHC申请移动电源怎么做REACHSVHC认证,REACHSVHC申请流程如何REACHSVHC的概念欧盟REACH法规是Registration,Evaluation,Au……msds是什么意思,有什么作用一、MSDS是什么,为什么要MSDS对于国内企业被买家提出MSDS报告要求时,没接触过的常会问MSDS是什么意思,为什么要MSDS?MSDS报告可对产品的危害,化学……AppStore限免WorkOther漫画滤镜Towaga等在今天限免的iOS限免应用中,波老师精选了以下4款限免应用,1款限免游戏。复制logo上方名字即可前往AppStore下载。如遇恢复原价,则表示限免已结束,请谨慎下载。具……最新鸿蒙系统升级名单来了覆盖nova多款机型,有你在用的吗?截至目前,鸿蒙系统发布已经一个多月时间了,很多用户都已经升级了鸿蒙系统,反馈表示挺不错的。但也有不少老机型用户,还需要等待一段时间才能升级,相信大家都等不及了吧,最近,华为发布……特拉斯ModelY标准续航版,27。6万元起售,你心动了吗一提到新能源汽车,相信很多朋友第一反应就会想到特斯拉,毕竟,在此领域特斯拉的地位可以说是非常之高,即便早前出现了一系列负面信息,却丝毫不影响喜爱它的粉丝。7月8日,小编从特斯拉……上汽才是明白人?上汽董事长与华为之间的合作不能接受自从宣布加入到汽车行业以来,华为成为了备受关注的对象。在极狐的发布会上,一个关于自动驾驶的视频更是点燃了整个行业的关注,L3级以上自动驾驶在华为的手上似乎离我们更近了。最……行业分析锂电池和新能源汽车锂电池很早就有了,快速发展是最近5到6年的事。可以说是新能源汽车的发展带动了锂电池的发展。锂电池产业链分为正极、负极、电解液、隔膜、铜箔。正极和负极占的成本最高。正极分为三元锂……500以内主动降噪的入耳式耳机有性价比高的推荐吗?感谢您的阅读!【500以内主动降噪的入耳式耳机,性价比高的有哪些?】降噪耳机一直成为了很多用户愿意考虑的耳机,现在我们在通勤的时候,经常可能会使用到降噪耳机。特别是……一夜之间!阿里股价跌回2014年,阿里会被时代抛弃吗?中概股都跌又不止阿里一家,我怎么觉得有一股神秘的力量在唱空中国,去年是蚂蚁,今年是恒大和联想,它们如果都倒了对谁有利?阿里不会被时代抛弃,这不过是暂时的下跌,阿里不会倒,恒大和……2000元内国产手机有哪些好的推荐?如果价格在2000以内的话,新手机的话基本上能买到的都是属于千元机的范畴了,而选择中端手机会有更好的体验,至于vivo和华为两个品牌哪个好的话,主要还是看你对于手机的要求是什么……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网