手机扫码查看
2020javaweb框架教程之spring的IOC与DI以及注入
IOC
Inverse Of Controll:控制反转
反转了依赖关系的满⾜⽅式,由之前的⾃⼰创建依赖对象,变为由⼯⼚推送。(变主动为被动,即反转)。
解决了具有依赖关系的组件之间的强耦合,使得项⽬形态更加稳健
DI
Dependency Injection :依赖注⼊
全新的依赖满⾜⽅式,体现在编码中就是全新的赋值⽅式 ==> 在⼯⼚中为属性推送值
如: <property name=”userDAO” ref=”userDAO”></property>
IOC与DI
在spring中关于IOC和DI的描述是这样的: IOC(DI) ,即,是⼀码事
IOC 是思想 :指导我们在满⾜依赖时,应该有反转的设计。
DI 是⼿段 :实际操作时,就是在⼀次次的 注⼊
DI的配置使用
1.DI的方式
set注入:借助set方法完成注入
构造注入:借助构造方法完成注入
自动注入:spring自动识别属性,并注入
2.set注入
DI类,属性:
private Integer age; private String name; private Boolean gender; private UsersDao usersDao; private List<Object> list; private Set<String> set; private Map<String,Object> map; private Properties properties;
<bean id="di04" class="bean.DI">
<!-- jdk8中基本类型-->
<property name="age" value="18"/>
<property name="name" value="zhangsan"/>
<property name="gender" value="false"/>
<!-- 引用类型 -->
<property name="usersDao" ref="userDAO"/>
<!-- List 或 数组 -->
<property name="list">
<list>
<value>18</value>
<ref bean="userDAO"/>
</list>
</property>
<!-- set集合 -->
<property name="set">
<set>
<value>"admin"</value>
</set>
</property>
<!-- map 集合 -->
<property name="map">
<map>
<entry key="name" value="admin"/>
<entry key="userDAO" value-ref="userDAO"/>
</map>
</property>
<!-- properties -->
<property name="properties">
<props>
<prop key="url">jdbc:mysql</prop>
</props>
</property>
</bean>
<!–
注意:在注⼊过程中,其实就是⼀个复制的过程, a=b, a是组件的属性,b是如上配置的value中的值。
则b是String,⽽a可能是 Integer,Boolean,Double,Date,….;即左值和右值类型不匹配。
spring有⾃动的类型转换机制,可以保证我们绝⼤多数的类型转换。
细节:“org.springframework.beans.propertyeidtors”包下定义了⼤量的Editor。
–>

构造和set注入混用
实体类增加一个构造方法以及get/set方法
<bean id="UsersId" class="bean.Users">
<!-- 构造和set注入混用-->
<constructor-arg index="0" type="java.lang.Integer" value="4"/>
<property name="name" value="zhangsan"/>
<property name="gender" value="false"/>
</bean>
工厂:
@Test
public void factoryBoot2(){
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
Users userId = context.getBean("UsersId", Users.class);
}
自动注入
autowire自动装载
byType将工厂中和属性类型一致的组件,赋值给对应类型
byName将工厂中和同名一致的组件,赋值给对应类型
创建一个类,私有dao接口并添加get/set方法,然后在配置文件添加自动注入

然后进工厂添加断点,进入debug视图

找到singletonObjects

基于类型 ⾃动注⼊时,如果存在多个此类型的bean,会报错



发表回复