2.spring-ioc

Spring IOC

1. IOC --控制反转

IOC全称为 Inverse Of Control,表示控制反转。指的是程序员使用硬编码创建的对象转为由Spring容器来创建,对于对象生命周期的控制交给Spring容器来管理。控制反转解决了具有依赖关系的组件之间的强耦合,使得项目形态更加稳健

2. IOC的使用

spring ioc的使用需要依赖于spring生态中的一些模块,如bean、core…

2.1 依赖导入

想要使用spring ioc的全部功能可以导入下方依赖:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.11</version>
</dependency>

在这里插入图片描述

2.2 创建需要ioc管理的类

public class User {
}

2.3 ioc配置文件

这里命名为:applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 其中放入一个一个的bean标签 -->
    <!-- bean标签表示一个交由ioc容器管理的对象 -->
    <!-- 示例: -->
    <bean name="user" class="com.dream.spring.ioc.model.User" />
</beans>

2.4 测试方法

@Test
public void iocTest(){
    //应用上下文  类路径下的xml
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    //根据Bean的名称获取类的对象
    User user = context.getBean("user", User.class);
    System.out.println(user);
}

3. DI — 依赖注入

在将对象交由ioc容器进行管理时,常常还需要为对象进行赋值,这就需要使用DI

DI全称为Dependency Injection,表示依赖注入。指的是在Spring创建对象的同时,为其属性赋值

首先给类中添加属性

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String username;
    private String password;
    private Map<String,Object> map;
    private double[] c;
    private UserInfo[] infos;
    private List<String> list;
    private Properties props;
    private UserInfo info;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserInfo {

    private String name;
    private String sex;
    private int age;
    private String hobby;
}

3.1 常见注入方式

常见的依赖注入有两种方式:set注入构造方法注入

3.1.1 构造方法注入

构造注入指的是通过构造放入为属性注入值。

<!--application.xml-->
<bean name="s" class="com.dream.spring.ioc.model.UserInfo">
    <!--这里按照顺序为属性注入值-->
    <constructor-arg index="0" value="李四" />
    <constructor-arg index="1" value="" />
    <constructor-arg index="2" value="22" />
    <constructor-arg index="3" value="跳舞" />
</bean>

注:按照构造方法出现参数的顺序书写,index从0开始

3.1.2 set方法注入(最常用)

set方法注入,通过寻找property标签中的name属性值,首字母大写加上set,通过反射进行调用(setName())注意,并不是直接通过属性名进行赋值

<!--application.xml-->
<bean name="stu" class="com.dream.spring.ioc.model.UserInfo">
    <property name="name" value="张三" />
    <property name="age" value="20" />
    <property name="sex" value="" />
    <property name="hobby" value="唱歌" />
</bean>

4.1 注入各种类型的参数

(以set注入方式)

4.1.1 注入常用数据类型

常用数据类型指8种基本数据类型以及对应的包装类、日期类型、字符串等。在注入时,可以使用value值直接写入“”之间。

注:Date类型需要使用默认的字符串格式yyyy/MM/dd

4.1.2 注入引用数据类型

对于引用数据类型,spring 提供了两种注入值的方式。

一种是通过 ref 属性来引用 已经定义在容器中的bean 对象从而进行值的注入;

一种是通过 property 标签下嵌套bean 标签来创建一个 bean 对象进行值的注入。

<!--第一种-->
<property name="" ref="" />

<!--第二种-->
<property name="">
    <bean class=""></bean>
</property>
4.1.3 注入数组类型

注入数组类型需要在property 标签下嵌套array标签

示例:

数组中为基本数据类型

<property name="c" >
    <array>
        <value>20</value>
        <value>30</value>
        <value>40</value>
    </array>
</property>

注:为引用数据类型的数组时,参照4.1.2进行注入,可以使用bean标签嵌套,在使用引用ref标签时,略有不同,存在单独的ref标签。

示例:

<property name="infos">
    <array >
        <ref bean="info"></ref>
    </array>
</property>

综合示例:

<property name="students">
    <array>
        <!--引用数据类型 可以使用bean标签创建bean对象注入值-->
        <!--<bean class=""></bean>-->
        <!--引用数据类型 可以使用ref标签引用bean对象注入值-->
        <ref bean="s" />
        <ref bean="stu" />
        <!--常用数据类型 可以使用value标签直接注入值-->
        <!-- <value></value>-->
    </array>
</property>
4.1.4 注入List集合对象

注入集合对象与数组类似,需要使用list标签。

<property name="list">
    <list>
        <!--引用数据类型 可以使用ref标签引用bean对象注入值-->
        <ref bean="s" />
        <!--引用数据类型 可以使用bean标签创建bean对象注入值-->
        <!--<bean class=""></bean>-->
        <value>aaaa</value>
        <value>bbbb</value>
    </list>
</property>
4.1.5 注入Set集合对象

示例:

<property name="friendNames">
    <set>
        <!--引用数据类型 可以使用ref标签引用bean对象注入值-->
        <ref bean="s" />
        <!--引用数据类型 可以使用bean标签创建bean对象注入值-->
        <!--<bean class=""></bean>-->
        <value>李四</value>
        <value>王五</value>
    </set>
</property>
4.1.6 注入Map集合对象

注入map对象,需要使用到map标签和其下的entry标签(map底层就是一个entry的对象数组)

示例:

<property name="map">
    <map>
        <entry key="a" value="1111"></entry>
        <entry key="b" value="2222"></entry>
        <!--引用数据类型 可以使用value-ref标签引用bean对象注入值-->
        <entry key="c" value-ref="info"></entry>
        <entry key="d">
            <!--引用数据类型 可以使用bean标签创建bean对象注入值-->
        	<!--<bean class=""></bean>-->
        </entry>
    </map>
</property>
4.1.7 注入Properties对象

注入properties对象需要使用props标签

<property name="props">
    <props>
        <prop key="name">硕硕</prop>
        <prop key="sex"></prop>
    </props>
</property>

注:properties中存放的键值都是String类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值