脚本宝典收集整理的这篇文章主要介绍了IOC DI,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
IOC—Inversion of Control,即控制反转,这不是一项技术,而是一种设计思想。在java开发中,ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接开控制。
DI—Dependency Injection,即依赖注入,组件之间依赖关系由容器运行决定,形象的说,即由容器动态的将某个依赖关系注入到组件中。
DI好处:
构造器注入
使用构造器注入通过配置构造器参数实现,构造器参数就是依赖。
传统实例化方式:
Tao t=new Tao(18,"钟文涛");
通过容器构造器依赖注入实例化
<bean name="tao" class="....Tao">
<constructor-arg name="name" value="钟文涛" />
<constructor-arg name="age" value="18" />
</bean>
setter注入
setter注入,是通过在通过构造器实例好bean后,通过调用bean类的setter方法进入注入依赖。
传统setter方法
Tao t=new Tao();
t.setName("钟文涛");
t.setAge(18);
通过容器setter注入
<bean>
<property name="name" value="钟文涛" />
<property name="age" value="18" />
</bean>
setter注入注意点:
注入常量
<property name="message" value="Hello World!"/>
或
<property name="index">
<value>1</value>
</property>
注入List集合类型
<bean>
<property name="hobby">
<list value-type="数据类型,不写默认为String" merge="default 不写默认为true 用于父子bean 是否合并还是覆盖">
<value>1</value>
<value>2</value>
</list>
</property>
</bean>
list集合配置引用类型
<bean>
<property name="hobby">
<list>
<ref bean="tao"/>
<ref bean="tao2"/>
</list>
</property>
</bean>
注入Set集合类型
<!--需要使用<set>标签来配置注入,其配置参数及含义和<lsit>标签完全一样-->
<bean>
<property name="hobby">
<set>
<value>1</value>
<value>2</value>
</set>
</property>
</bean>
注入数组类型
<!--一维数组-->
<bean>
<propert name="ywsz">
<array value-type="" merge="" 跟list一样>
<value>1</value>
<value>2</value>
<value>3</value>
</array>
</propert>
</bean>
<!--二维数组-->
<bean>
<propert name="ewsz">
<array>
<array value-type="" merge="" 跟list一样>
<value>1</value>
<value>2</value>
<value>3</value>
</array>
<array value-type="" merge="" 跟list一样>
<value>4</value>
<value>5</value>
<value>6</value>
</array>
</array>
</propert>
</bean>
注入Map类型
<bean>
<property name="map">
<map key-type="key数据类型" value-type="value数据类型">
<entry key="1" value="钟文涛"/>
</map>
</property>
</bean>
注入Properties
Spring能注入java.util.Properties类型数据,需要使用
<bean>
<property name="properties">
<props value-type="int">虽然这里指定了int类型,但是不起作用,因为它键和值就是String
<prop key="a">aaaa</prop>
<prop key="b">bbbb</prop>
</props>
</property>
</bean>
构造器注入方式
<bean name="bean1" class="...." />
<bean name="bean2" class="....">
<constructor-arg index="0" ref="bean1"/>
</bean>
或
<bean name="bean1" class="...." />
<bean name="bean2" class="....">
<constructor-arg index="0">
<ref bean="bean1"/>
</constructor-arg>
</bean>
setter注入方式
<bean name="bean1" class="...." />
<bean name="bean2" class="....">
<property name="setter" ref="bean1"/>
</bean>
或
<bean name="bean1" class="...." />
<bean name="bean2" class="....">
<property name="setter">
<ref bean="bean1"/>
</property>
</bean>
处理null值
<bean>
<property name="message"><null/></property>
</bean>
使用p命名空间简化setter注入
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean name="dept" class="com.trkj.pojo.Dept" p:dname="111"/>
</beans>
@Autowired
在零配置中,通过使用@Autowired来实现引用依赖注入
在自动扫描模式下自动装配
@Component("名字"),如果没有指定名字,会将类名首字母小写,然后当成名字。
public class Studen{
@Autowired(required默认为true,可以设置为false,代表必须给值)
private int id;
private String name;
}
@Qualifier
@Autowired按优先类型自动装配(byType方式进行匹配)
当Spring容器中存在多个匹配类型(父子类)时,则建议使用@Qualifier按名称进行装配(byName方式进行匹配),使用@Qualifier,必须和@Autowired一起使用。
如果不使用@Qualifier时,也可利用属性名与类名来进行匹配,此时属性名为首字母小写后的类名
@Autowired
@Qualifier("od")
private Order order;//订单对象
Resource
在自动扫描模式下也可使用@Resource注解,但该注解由J2EE提供,需要导入包javax.annotation.Resource
如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。
如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。
如果指定了type,则从上下文中找到类似匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。
如果既没有指定name,又没有指定type,则自动按照byName方式进行装配(属性名匹配name);如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。 @Autowired可以为空,@Resource不能为空
@Resource(name = "od")
private Order order;
以上是脚本宝典为你收集整理的IOC DI全部内容,希望文章能够帮你解决IOC DI所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。