Spring IoC[控制反转]

简介: 近段时间正在学习spring。对于spring IOC发表一下自己的见解1 spring IoC 1.1 什么是IoC 控制反转(Inversion of Control,英文缩写为IoC)。主要是用来降低程序之间耦合度的一种方式。1.2 IoC主要形式 ◇依赖查找:容器提供回调接口和上下文条件给组件。组件就必须使用容器提供的API来查找资源和协作对象,

近段时间正在学习spring。对于spring IOC发表一下自己的见解

1 spring IoC

1.1 什么是IoC
控制反转(Inversion of Control,英文缩写为IoC)。主要是用来降低程序之间耦合度的一种方式。

1.2 IoC主要形式
◇依赖查找:容器提供回调接口和上下文条件给组件。组件就必须使用容器提供的API来查找资源和协作对象,容器将调用这些回调方法,从而让应用代码获得相关资源。

◇依赖注入:组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。容器全权负责的组件的装配,它会把符合依赖关系的对象通过JavaBean属性或者构造函数传递给需要的对象。

    *通过JavaBean属性注射依赖关系的做法称为设值方法注入(Setter Injection);
    *将依赖关系作为构造函数参数传入的做法称为构造器注入(Constructor Injection)

1.3 IoC的优缺点

  • 优点
    把对象生成放在xml配置文件中,当我们需要修改某些对象时候,只需要在xml中进行操作,
    降低了程序之间的耦合度。

  • 缺点
    在程序编写时候可能增加步骤。
    通过反射机制影响效率。
    修改类文件后操作比较繁琐。

2 具体小案例

2.1 编写Dao类

public interface UserDao {

    public void getUser();
}

2.2 编写impl类

public class UserImpl implements UserDao {

    private String name;
    private String password;

    public UserImpl(String name) {
        super();
        this.name = name;
    }

    public UserImpl(String name, String password) {
        super();
        this.name = name;
        this.password = password;
    }

    @Override
    public String toString() {
        return "username="+name+"   password="+password;
    }

    @Override
    public void getUser() {
        System.out.println(toString());
    }



}

2.3 编写service接口

public interface UserService {
    public void showservice();
}

2.4 service实现类

public class UserServiceImpl implements UserService {

    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void showService() {

        userDao.getUser();
    }
}

2.5 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 id="user" class="com.jsu.dao.Impl.UserImpl">
        <constructor-arg index="0" value="zhangsan"/>
        <constructor-arg index="1" value="123"/>
    </bean>

    <!--只有一个参数的构造方法-->
    <bean id="user1" class="com.jsu.dao.Impl.UserImpl">
        <constructor-arg value="张三"/>
    </bean>


    <bean id="service" class="com.jsu.service.serviceImpl.UserServiceImpl">
        <property name="userDao" ref="user1"/>
    </bean>

    <!--配置别名-->
    <alias name="service" alias="sc"/>

    <!--id是唯一的 此时name 相当于别名
    name 可用空格 逗号 分号 分割
    假如没配置id 则获取直接获取name
    constructor-arg 当只有一个时候 直接输入value
    当有多个时候需要用下标指定
    -->
    <bean id="users" name="user3" class="com.jsu.dao.Impl.UserImpl">
        <constructor-arg value="lisi"/>
    </bean>



</beans>

2.6 测试类

public class SpirngTest {
    public static void main(String[] args) {
        //解析xml文件
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        //获取对象
        UserService service = (UserService) context.getBean("service");
        service.showService();
    }

}

2.7 结果

控制台输出:

username=zhangsan   password=123

通过上述案例
我们可以发现本来要在service中创建对象的任务
转交给了xml配置文件
这样降低了程序之间的耦合度

目录
相关文章
|
7月前
|
XML Java 测试技术
Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)
Spring 第三节 IOC——基于注解配置和管理Bean 万字详解!
482 26
|
4月前
|
XML Java 数据格式
Spring IoC容器的设计与实现
Spring 是一个功能强大且模块化的 Java 开发框架,其核心架构围绕 IoC 容器、AOP、数据访问与集成、Web 层支持等展开。其中,`BeanFactory` 和 `ApplicationContext` 是 Spring 容器的核心组件,分别定位为基础容器和高级容器,前者提供轻量级的 Bean 管理,后者扩展了事件发布、国际化等功能。
|
9月前
|
XML Java 数据格式
【SpringFramework】Spring IoC-基于XML的实现
本文主要讲解SpringFramework中IoC和DI相关概念,及基于XML的实现方式。
186 69
|
6月前
|
Java 容器 Spring
什么是Spring IOC 和DI ?
IOC : 控制翻转 , 它把传统上由程序代码直接操控的对象的调用权交给容 器,通过容器来实现对象组件的装配和管理。所谓的“控制反转”概念就是对组件对象控制权的转 移,从程序代码本身转移到了外部容器。 DI : 依赖注入,在我们创建对象的过程中,把对象依赖的属性注入到我们的类中。
|
9月前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
9月前
|
Java Spring 容器
【SpringFramework】Spring IoC-基于注解的实现
本文主要记录基于Spring注解实现IoC容器和DI相关知识。
137 21
|
9月前
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
215 12
|
9月前
|
存储 缓存 Java
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
200 2
|
12月前
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
607 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
|
11月前
|
存储 开发框架 Java
什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
文章详细介绍了Spring、IOC、DI的概念和关系,解释了控制反转(IOC)和依赖注入(DI)的原理,并提供了IOC的代码示例,阐述了Spring框架作为IOC容器的应用。
664 1
什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码