Spring中IoC的详细介绍

发布时间:2021-09-14 18:13 来源:亿速云 阅读:0 作者:chen 栏目: 服务器

这篇文章主要讲解了“Spring中IoC的详细介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring中IoC的详细介绍”吧!

Spring中的IoC:

1)概念:把对象的创建、初始化、销毁等工作交给spring容器来做。由spring容器控制对象的生命周期。
2)目的:为了解决多个对象之间的依赖关系。
3)原理:
	1)通过配置文件(或注解)的方式来描述bean与bean之间的依赖关系。
	2)通过动态代理和java的反射机制来实例化bean,同时建立bean之间的依赖关系。
	
4)spring容器创建对象的3种方式(bean的实例化):

	1)使用Spring的IoC创建对象:调用默认的构造函数(默认)
		1>指定bean的class属性
		2>class需要一个默认的空构造器
		
		<bean id="helloWorld" class="com.jxn.HelloWorld" />
		
		得到实例对象:HelloWorld helloWorld = (HelloWorld)context.getBean("helloWorld");
	
	
	2)在Spring中使用工厂模式创建对象:
	
		使用静态工厂方法
			1>指定class属性外
			2>通过factory-method属性来指定创建bean实例的静态工厂方法
			
			<bean id="helloWorld" class="com.jxn.HelloWorldFactory" factory-method="createInstance"></bean>
			注:相当于调用了 HelloWorldFactory.createInstance();
			
			public class HelloWorldFactory {
				public static HelloWorld createInstance(){
					return new HelloWorld();
				}
			}
			
			得到实例对象:HelloWorld helloWorld = (HelloWorld)context.getBean("helloWorld");

		使用实例工厂方法
			1>定义一个工厂类
			2>通过factory-bean属性指定工厂类,通过factory-method属性指定该工厂类的非静态工厂方法

			<bean id="helloWorldFactory" class="com.jxn.HelloWorldFactory" />
			<bean id="HelloWorld" factory-bean="helloWorldFactory" factory-method="createInstance" />
			注:相当于调用了 new HelloWorldFactory.createInstance();
			
			public class HelloWorldFactory {
				public HelloWorld createInstance(){
					return new HelloWorld();
				}
			}
			
			得到实例对象:HelloWorld helloWorld = (HelloWorld)context.getBean("helloWorld");
		

	3)使用Spring的IoC创建对象 VS 使用工厂模式创建对象

		当创建的对象需要修改(eg:新增属性)时:
			Spring的IoC只需要修改对象对应的类即可。
			工厂模式需要修改或添加工厂方法。


5)DI(依赖注入):给对象的属性赋值

	1)使用属性的setter方法进行注入:
	
		说明:通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,即可实现基于setter的依赖注入。
		举例:
			<!-- property是用来描述一个类的属性:直接变量(基本类型、String类型等)用value赋值,引用类型用ref赋值 --> 
			<bean id="student" class="com.jxn.domain.Student" />
			<bean id="person" class="com.jxn.domain.Person">
				
				<!-- 直接变量 -->
				<property name="name" value="aaa" />
				<!-- 引用类型 -->
				<property name="student" ref="student">
				
				<!-- List -->
				<property name="lists">
					<list>
						<value>list1</value>
						<ref bean="student"/>
						<value>list3</value>
					</list>
				</property>

				<!-- Map -->
				<property name="map">
					<map>
						<entry key="m1">
							<value>map1</value>
						</entry>
						<entry key="m2">
							<ref bean="student"/>
						</entry>
					</map>
				</property>
				
				<!-- Properties -->
				<property name="properties">
					<props>
						<prop key="key1">value1</prop>
						<prop key="key2">value2</prop>
					</props>
				</property>
			
			</bean>
	
	2)使用构造器注入:通过调用带参数的构造器来实现:
	
		说明:
			1>如果spring的配置文件的bean中没有<constructor-arg>标签,则调用默认的构造方法
			2>如果spring的配置文件的bean中有<constructor-arg>标签,则该元素确定唯一的构造方法,该标签的属性
				index  指参数的位置,从0开始
				type   指参数的类型,如果不写仍可确定唯一的构造方法,则可以省略type属性
				value  给基本类型赋值
				ref    给引用类型赋值
		举例:
			<bean id="person" class="com.jxn.domain.Person">
				<constructor-arg index="0" type="java.lang.Long" value="1"></constructor-arg>
				<constructor-arg index="1" value="zhangsan"></constructor-arg>
				<constructor-arg index="2" ref="student"></constructor-arg>
			</bean>
			
			<bean id="student" class="com.jxn.domain.Student" />




免责声明:本站发布的内容(图片、视频和文字)以原创、来自互联网转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:ts@56dr.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。