作者:Lily賈麗 | 来源:互联网 | 2023-09-17 15:13
通常new一个实例,控制权由程序员控制,而控制反转是指new实例工作不由程序员来做而是交给Spring容器来做。。在Spring中BeanFactory是IOC容器的实际代表者。D
2020.9.9spring中继控制IOC学习笔记
IOC的概念:
IOC是指具有依赖于注入功能的容器,
是一个容器,IOC容器可以创建负责实例化、放置、设置和在APP应用程序中建立对象依赖关系的对象。 通常,在new的实例中,控制权由程序员控制。 “反转控制”表示new实例的工作不是由程序员进行的,而是由Spring容器进行的。 在Spring中,BeanFactory是IOC容器的实际代表。
DI )依赖关系注入(Dependency injection ) :容器创建对象后,处理对象依赖关系。
为了降低代码之间的耦合度,将所有类传递给第三方容器进行控制,并直接从容器中检索需要使用哪个类。
注入IOC容器的几种方式set注入方式(xml轮廓方式) ) )。
静态工厂注入方式
结构方法注入方式
基于注释的方法
1.set方法(使用spring的xml配置文件)1)首先在pom.xml中导入jar包的spring-context,然后允许进行spring.xml配置文件
ependencygroupidorg.spring framework/groupidartifactidspring -上下文/artifactidversion4.3. 14.release/version /
! -id是Bean类本身的名称,可以使用name,name用逗号分隔名称。 例如,name='user1,user2,user3'-- bean class=' com.chuan.model.user ' id=等-参数注入--property name='
property是导入类属性。 以上写了两个属性。
)3)获取容器中的bean类
Bean配置文件classpathxmlapplicatiOncontextctx=newclasspathxmlapplicationcontext (' context path.XML ' ); 获取//Bean类。 name是指bean类中的id值useruser=CTX.getbean('user ',User.class ); system.out.println('user='user ); 2 .注释方式向IOC容器(1)注入类,创建java注释配置文件
//这构成了Configure类,//注释Bean表示这是Bean。 在spring中注册的ioc容器@ configurationpublicclassjavaconfig { @ bean (' Linux cmd ' (Linux conditional Linux cmd ) ) linuxconditionation }@bean(windowscmd ) (WindowsConditional windowsCmd ) ) { return new WindowsConditional; ()2)获取IOC容器中的Bean类
//它注释spring IOC容器中的类annotatiOnconfigapplicationcontextaac=newannotationconfigapplicationcontext (Java config.class ) xcmd=AAC.getbean(Linuxcmd (,LinuxConditional.class ) ); system.out.println (' Linux cmd=' Linux cmd ); windowscOnditionalwindowscmd=AAC.get bean (windows cmd (,WindowsConditional.class ) ); windowscmd.setname(dsad ); windows cmd.seturl (https://张川/blog.csdn.net ); system.out.println (' windows cmd=' windows cmd ); 打印结果:
二、正在spring的aware接口aware接口是指能够感知正在spring的Bean类自身属性的接口。
BeanAware接口是获取spring IOC容器中Bean类的唯一名称。 ResorceLoaderAware加载资源文件中的数据。 EnvironmentAware是加载到资源文件中的资源,必须尝试在注释@PropertySource中加载资源。 这是接口实现类。 AwareServiceService
/** * @Author张川* @博客张川. blog.csdn.net * @ date 2020-09-19336005 */@ service @ PRopertySource (valla thor注释property source是资源文件中的资源publicclassawareserviceimplementsbeannameaware,beberce 资源加载器,环境专用资源加载器; 私有环境环境; publicvoidsetbeanfactory (beanfactory beanfactory ) throwsbeansexception { } public void output ) throwsioexception { system.} //使用资源加载器将资源文件中的javaboy.txt文件bufferedreaderbr=newbufferedreader (newinputstreamreader (资源. get inpurce system.out.println('s='s; br.close (; bufferReader资源string address=environment.getproperty (' Java boy.address ' ); //2。 由于注释PropertySource中已经加载了javaboy.propertires资源,因此可以使用environment.getProperty参数system.out.println (' addonment.getproprty ) }/* * * *实现beanname aware接口类以获取bean的名称。 其中,beanname自动获取bean类本身的id属性值* @ params */publicvoidsetbeanname { strings } this.beanname (/* * enviroment接口) * @ param environment */publicvoidsetenvironment (环境环境) { this.envirOnment=environment; } /** *获取资源加载器* @ paramresourceloader */publicvoidsetresourceloader (资源加载器) this.resorceloader