舒大少博客

一个95后少年的个人博客

当前时间为:
欢迎大家来到舒大少博客http://admin.evshou.com,广告合作以及淘宝商家推广请微信联系15357240395
...
零基础学Python从入门到精通 python基础教程基础

【在售价】34.90 元
【在售价】34.90 元

立即领券
...
Python编程从入门到精通 视频教学 python语言程序设计

【在售价】29.80 元
【券后价】19.80元

立即领券
...
未来教育计算机二级ms office题库电子版c语言

【在售价】28.00 元
【在售价】28.00 元

立即领券
...
Python3视频零基础教程自学入门到精通编程语言程序设计网络爬虫

【在售价】62.00 元
【券后价】52.00元

立即领券
...
Python编程从入门到精通 零基础学python数据分析

【在售价】29.80 元
【券后价】19.80元

立即领券

2020javaweb框架教程之spring的IOC与DI以及注入

2020-11-29 13:59:06
swq1822677238

手机扫码查看

2020javaweb框架教程之spring的IOC与DI以及注入

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,会报错

发表评论

邮箱地址不会被公开。 必填项已用*标注