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配置文件
这样降低了程序之间的耦合度

目录
相关文章
|
11天前
|
XML Java 数据格式
【SpringFramework】Spring IoC-基于XML的实现
本文主要讲解SpringFramework中IoC和DI相关概念,及基于XML的实现方式。
100 69
|
9天前
|
Java Spring 容器
【SpringFramework】Spring IoC-基于注解的实现
本文主要记录基于Spring注解实现IoC容器和DI相关知识。
45 21
|
16天前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
14天前
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
|
1月前
|
存储 缓存 Java
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
57 2
|
2月前
|
XML 缓存 Java
搞透 IOC、Spring IOC ,看这篇就够了!
本文详细解析了Spring框架的核心内容——IOC(控制反转)及其依赖注入(DI)的实现原理,帮助读者理解如何通过IOC实现组件解耦,提高程序的灵活性和可维护性。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
|
4月前
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
303 18
|
4月前
|
XML Java 测试技术
spring复习01,IOC的思想和第一个spring程序helloWorld
Spring框架中IOC(控制反转)的思想和实现,通过一个简单的例子展示了如何通过IOC容器管理对象依赖,从而提高代码的灵活性和可维护性。
spring复习01,IOC的思想和第一个spring程序helloWorld
|
2月前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
49 0
|
3月前
|
Java Spring 容器
Spring IOC、AOP与事务管理底层原理及源码解析
【10月更文挑战第1天】Spring框架以其强大的控制反转(IOC)和面向切面编程(AOP)功能,成为Java企业级开发中的首选框架。本文将深入探讨Spring IOC和AOP的底层原理,并通过源码解析来揭示其实现机制。同时,我们还将探讨Spring事务管理的核心原理,并给出相应的源码示例。
155 9
下一篇
开通oss服务