spring——IOC控制反转(一)

一、spring之IOC
1、
IOC(控制反转:Inverse of Control ),又称作DI依赖注入,是一种重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的 Spring 框架的核心。
2、
依赖注入:是指 在运行期,由外部容器动态地将依赖对象注入到组件中。
依赖注入让Bean与Bean之间以配置文件组织在一起,而不是以硬编码的方式耦合在一起。
二、依赖注入的方式
1、属性注入

<bean id="p1" class="com.mao.spring.model.People">
  	<property name="id" value="1001"/>
  	<property name="name" value="张嘉译"/>
  	<property name="age" value="30"/>
  	<property name="motto" value="我就是神"/>
  </bean>

2、构造器类型注入,索引注入,类型和索引混用

<!-- 通过构造器注入一个bean:类型 --> 
  <bean id="p2" class="com.mao.spring.model.People">
  	 <constructor-arg type="Integer" value="1223"/>
  	 <constructor-arg type="String" value="张海阳"/>
  	 <constructor-arg type="int" value="78"/>
  	 <constructor-arg type="String" value="我爱睡觉"/>
  </bean>
	  <!-- 通过构造器注入一个bean:索引 -->
  <bean id="p3" class="com.mao.spring.model.People">
  	<constructor-arg index="0" value="1222"/>
  	<constructor-arg index="1" value="张大喵"/>
  	<constructor-arg index="2" value="老子要吃肉"/>
  	<constructor-arg index="3" value="30"/>
  </bean>
  <!-- 通过构造器注入一个bean:索引和类型混合使用,起始位置是 0 -->
  <bean id="p4" class="com.mao.spring.model.People">
  	<constructor-arg index="0" type="int" value="1003" />
  	<constructor-arg index="2" type="Integer" value="25" />
  	<constructor-arg index="1" type="String" value="唐敏" />
  </bean>

3、工厂注入,动态和静态工厂

<!-- 通过动态工厂注入一个bean,但是需要提前创建工厂类,而且要提供构建bean的方法  -->
  <bean id="peopleFactory" class="com.mao.spring.util.PeopleFactory" />
  <!-- 通过上述动态peopleFactory工厂,构建bean -->
  <bean id="p5" factory-bean="peopleFactory" factory-method="createPeople" />
  <!-- 通过静态的工厂注入 -->
  <bean id="p6" class="com.mao.spring.util.PeopleFactory" factory-method="getPeople" />

三、注入参数
这是被注入的bean

<bean id="p7" class="com.mao.spring.model.People" >
  	<property name="id" value="15151" />
  	<property name="name" value="众人皆知" />
  	<property name="age" value="15" />
  	<property name="dog" ref="dog"/>
  </bean>

1、ref参考方式注入

<bean id="dog" class="com.mao.spring.model.Dog">
  	<property name="name" value="哈士奇" />
  </bean>

2、内部bean的注入

<bean id="p8" class="com.mao.spring.model.People">
  	<property name="id" value="1515" />
  	<property name="name" value="张玄凌" />
  	<property name="age" value="56" />
  	<property name="dog" >
  		<bean class="com.mao.spring.model.Dog">
  			<property name="name" value="阿拉斯加" />
  		</bean>
  	</property>
  </bean>

3、内部bean的空值注入

  <bean id="p9" class="com.mao.spring.model.People">
  	<property name="id" value="1564" />
  	<property name="name" value="张子凡" />
  	<property name="age" value="26" />
  	<property name="dog">
  		<null></null>
  	</property>
  </bean>

4、级联属性:必须自己new一个dog对象

<bean id="p10" class="com.mao.spring.model.People">
  	<property name="id" value="15412" />
  	<property name="name" value="鹿林旋" />
  	<property name="age" value="45" />
  	<property name="dog.name" value="泰迪" />
  	<!-- 使用级联操作,必须手动实例化bean中得dog对象 -->
  </bean>

5、集合属性类型

private List<String> hobbies=new ArrayList<String>();
private Set<String> loves=new HashSet<String>();
private Map<String,String> works=new HashMap<String,String>();
private Properties addresses=new Properties();
<bean id="people6" class="com.xdkj.entity.People">
		<property name="id" value="1"></property>
		<property name="name" value="张三"></property>
		<property name="age" value="11"></property>
		<property name="dog" ref="dog1"></property>
		<property name="hobbies">
			<list>
				<value>唱歌</value>
				<value>跳舞</value>
			</list>
		</property>
		<property name="loves">
			<set>
				<value>唱歌2</value>
				<value>跳舞2</value>
			</set>
		</property>
		<property name="works">
			<map>
				<entry>
					<key><value>上午</value></key>
					<value>写代码</value>
				</entry>
				<entry>
					<key><value>下午</value></key>
					<value>测试代码</value>
				</entry>
			</map>
		</property>
		<property name="addresses">
			<props>
				<prop key="address1">aaaaa</prop>
				<prop key="address2">bbbbb</prop>
			</props>
		</property>
	</bean>

注:其中的id名的话可以根据自己的需要改动,我从之前写的demo拼接而来
三、自动装配
1、通过配置 default-autowire 属性,Spring IOC 容器可以自动为程序注入 bean;默认是 no,不启用自动装配;default-autowire 的类型有 byName,byType,constructor;
2、byName:通过名称进行自动匹配;
要求Dog对象的名字dog必须跟bean.xml中Dog的id相同。
3、byType:根据类型进行自动匹配;
在bean.xml中只要有一个Dog类型的对象存在就能够自动注入,但是只能有一个
4、constructor:和 byType 类似,只不过它是根据构造方法注入而言的,根据类型,自动注入;
跟byType类似,不需要处理bean的名字
5、建议:自动装配机制慎用,它屏蔽了装配细节,容易产生潜在的错误;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值