zoukankan      html  css  js  c++  java
  • Spring中IoC的简单学习

    Spring中IoC的简单学习

    又是书接上文工厂模式中存在的问题,上文中我举例了

    这两种截然不同的创建对象的方式

    后者:

    graph LR a[程序]-->b[资源] a[程序]-->c[资源] a[程序]-->d[资源] e[传统模式下有程序自身控制资源]

    前者:

    graph LR b[工厂]-->|提供资源|a[程序] b[工厂]-->|控制资源|c[资源] b[工厂]-->|控制资源|d[资源] b[工厂]-->|控制资源|e[资源] g[工厂模式下程序对资源的控制权交给了工厂,由工厂对程序提供资源]

    通过工厂来建立程序和各资源的联系,将控制权由程序本身转移给工厂,这就是“控制反转(IoC)”。把创建对象的权利交给框架。它包括依赖注入(DI)和依赖查找(DL)。这么做的好处就是降低程序间的依赖关系,也就是削减程序耦合。

    在实际的开放过程中,我们可以通过自己编写工厂模式来实现降低耦合,但是如果这样会消耗更多的精力,所以我们完全把这部分的内容都交给了Spring框架,让框架来替我们完成这部分的内容。

    示例如下:

    打开pom.xml,导入spring依赖,添加如下内容

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

    在resources文件夹下新建一个Bean.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">
        <!--把对象的创建交给spring来管理-->
        <bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"></bean>
    
        <bean id="accountMapper" class="com.itheima.mapper.impl.AccountMapperImpl"></bean>
    
    </beans>
    

    最后便可以用spring的IoC容器,并根据id获取对象

    package com.itheima.ui;
    
    import com.itheima.mapper.iAccountMapper;
    import com.itheima.service.iAccountService;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    /**
     * @Author:Zzq
     * @Description:模拟一个表现层,用于调用业务
     * @Date:2020/6/13
     * @Time:22:28
     */
    public class Client {
    
        /**
         * 获取spring的IoC核心容器,并根据id获取对象
         * @param args
         */
        public static void main(String[] args) {
            //1.获取核心容器对象
            ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
            //2.根据id获取bean对象
            iAccountService as = (iAccountService)ac.getBean("accountService");
            iAccountMapper adMp = ac.getBean("accountMapper" , iAccountMapper.class);
    
            System.out.println(as);
            System.out.println(adMp);
        }
    }
    
    

    运行结果如下

    可以看到,两个不同的对象已经有beanFactor生产出来了,有了Spring框架,我们就能够将工厂部分完全交给框架,我们本身只用关心业务代码的编写,为我们节省时间和精力。

  • 相关阅读:
    发布AI芯片昆仑和百度大脑3.0、L4自动驾驶巴士量产下线,这是百度All in AI一年后的最新答卷...
    Redis 使用多个数据库及密码配置
    Redis 使用多个数据库及密码配置
    Redis 使用多个数据库及密码配置
    [Winform]DataGridView列自适应宽度
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    运筹学那些事,专科学生学习运筹学之图论方法,No.7
    SpringMVC的HttpMessageConverter
    @ResponseStatus的作用
  • 原文地址:https://www.cnblogs.com/zzzqi/p/13139898.html
Copyright © 2011-2022 走看看