spring框架:IOC(inversion of control)控制反转

1.为什么要使用IOC?
在这里插入图片描述
仔细观察上图可以发现层与层之间存在依赖关系,在一个类里面创建(new)了另外一个类的对象。
使用IOC的目的就是为了解耦,缓解这种层与层之间的依赖关系

传统上我们都是使用new 的方式来直接创建对象,现在有了spring之后,我们就再也不new对象了,而是把对象创建的工作交给spring容器去维护。我们只需要问spring容器要对象即可。

2.实例展示

2.1首先给出结构图
在这里插入图片描述
记得引入依赖:

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

2.2 解耦过程分析

在这里插入图片描述
通过InstanceFactory去创建Service对象,我们再将InstanceFactory方法交给spring核心容器去管理即可。

2.3UserController.java
创建核心容器,使用spring的核心容器根据id获取对象

/**
 * 1.引入依赖
 * 2.创建spring的配置文件beans.xml
 * 3.创建spring的核心容器
 * 4.使用spring的核心容器根据id获取对象
 */
public class UserController {
    public static void main(String[] args) {
        //创建核心容器,要指定要读取的配置文件(spring框架)
        ApplicationContext act=new ClassPathXmlApplicationContext("beans.xml");
        //没有交给spring的核心容器去管理
        InstanceFactory instanceFactory = new InstanceFactory();
        UserService userService1 = instanceFactory.getUserService();
        //我们要创建的对象就在act核心容器中,使用spring的核心容器根据id获取对象
        //已解耦
        //UserService userService = (UserService) act.getBean("userService");
        String name = userService1.getName();
        System.out.println(name);
    }
}

2.4 xml文件配置bean

通过bean标签配置对象 把对象交给Spring管理
2.4. 1.掌握的属性
id/name属性: 作为bean标签的唯一标识, 随便取, 不要重复就可以【一般使用接口/类的名字, 首字母小写】
class属性: 类的全限定名
scope属性: 配置bean的类型的
singleton 单例的【默认】, Spring把创建的对象存到Spring容器里面
prototype 多例的, 创建好之后, 不会存的Spring容器
request 把创建的对象存到request域
session 把创建的对象存到session域
2.4. 2.了解的属性
init-method属性: 初始化监听, 当被Spring创建的时候, 会调用这个方法
destroy-method属性: 销毁监听, 当被Spring从容器移除,Spring容器销毁, 会调用这个方法(不适合多例情况)

<?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 id="userService" class="MyService"></bean>-->

    <!--spring核心容器创建bean对象方式二
    1。静态工厂创建对象,让spring核心容器管理静态工厂创建出来的对象
    使用场景是:将工具类创建出来的对象交给spring的核心容器管理
    id表示唯一标识
    class表示静态工厂的类的权限定名
    factory-method表示静态工厂中创建对象的那个方法

    -->
    <!--<bean id="userService" class="StaticFactory" factory-method="createUserService"></bean>-->

    <!--实例工厂:让spring核心容器管理实例工厂和工厂创建出来的对象
    1.使用bean标签,创建实例工厂对象并且交由spring核心容器管理(id是实例工厂的唯一标识)
    2.调用实例工厂对象的方法,创建对象(id:创建对象的唯一标识
    factory-bean标识:要调用哪个工厂对象的方法就填写哪个id
    factory_method:表示调用工厂对象的哪个方法)
    -->
<bean id="InstanceFactory" class="com.wlj.factory.InstanceFactory"></bean>
<bean id="userService" factory-bean="InstanceFactory" factory-method="getUserService"></bean>

</beans>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值