栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Ioc控制反转

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Ioc控制反转

2、IOC控制反转简介

耦合和内聚

耦合coupling:结合 联结

  • 耦合:代码书写过程中技术的结合紧密度。用于衡量各个模块之间的紧密程度。
  • 内聚:单个模块内部组成部分之间的联系。测试紧密程度。


程序书写目标:高内聚,低耦合。

模块之间不能紧密,单个模块内部要高度紧密。

1、工厂模式发展历程 1、直接new一个dao对象在我们的类代码中(传统的开发模式)
  • 直接new一个dao对象在我们的类代码中

因为每出现一个dao实现类,就会要重新再类中去创建对象,这样增加了两个模块之间的耦合程度,所以才出现了工厂模式

2、出现了工厂代理(使用工厂类new一个对象)

new对象不再在我们的类中操作,全部在工程类中的操作,工厂类会返回一个new出来的对象,也就是说,创建对象的任务交给了工厂类。

有了工厂就不用修改调用方源代码,但是需要修改工厂代码;工厂与dao代码耦合,这样也降低了两个模块之间的耦合度。

3、加入了配置文件

将实现类更新到配置文件中,工厂只需要通过读取配置文件的方式将实现类返回给我们的类。只需要改配置文件。

4、spring雏形


有了spring就不用再使用工厂设计模式了,sping容器比工厂模式更优秀。

5、ioc

ioc:控制反转,spring控制应用程序所需要使用的外部资源;

传统模式开发是通过new一个对象,去获取另一个类的资源的,这种主动权全都在类手上,代码不移维护,为了容易维护代码才有了spring的控制反转,控制反转就相当于,spring拿下了类的控制权,

所有的new对象和获取外部资源都交给spring的ioc容器

spring控制的资源全部放在spring容器当中,该容器成为ioc容器。

3、ioc控制反转入门案例

1、接口

package com.zhu.service;

public interface UserService {

    public void save();

}

2、这个接口的实现类

package com.zhu.service.impl;

import com.zhu.service.UserService;

public class UserServiceImpl implements UserService {

    @Override
    public void save() {
        System.out.println("这个保存方法运行了...");
    }
}

3、将这个实现类注册到spring容器当中




    



4、测试类,通过加载spring容器获取其中的bean

import com.zhu.service.UserService;
import com.zhu.service.impl.UserServiceImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserApp {

    public static void main(String[] args) {

        //加载配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //从ioc的bean中获取资源,这个拿去的操作就像是创建对象,所以必须给它一个它自己的数据类型
        UserServiceImpl userService = (UserServiceImpl) context.getBean("userService");

        userService.save();
    }

}
4、IOC中的bean标签 1、bean标签和name属性

bean可以定义多个名称,使用name属性来完成,中间使用 , 分隔;这个name个id的使用一样


    

2、bean标签的scope属性

scope标签用于控制bean标签是否是单例

    

scope=“singleton”

import com.zhu.service.UserService;
import com.zhu.service.impl.UserServiceImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserApp {

    public static void main(String[] args) {

        //加载配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //从ioc的bean中获取资源,这个拿去的操作就像是创建对象,所以必须给它一个它自己的数据类型
        UserServiceImpl userService1 = (UserServiceImpl) context.getBean("userService1");
        UserServiceImpl userService2 = (UserServiceImpl) context.getBean("userService1");
        UserServiceImpl userService3= (UserServiceImpl) context.getBean("userService1");
        //创建多个对象对比内存地址是否一致,如果一致就是使用的单例模式
        System.out.println(userService1);
        System.out.println(userService2);
        System.out.println(userService3);
        System.out.println(userService1 == userService2);//结果为true
        userService1.save();
    }

}

3、bean的声明周期

init-method属性和destroy-method属性

使用它的前提是在这个类中写创建和销毁方法

    

4、静态工厂与实例工厂的创建(了解)

目的:处理遗留系统,将遗留系统的工厂模式改为spring的方式

原因:因为工厂模式已经落后了,所以要改成sping的方式,spring也给出了相应的处理模式

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/338126.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号