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

目录
相关文章
|
3月前
|
Java Spring
Spring5深入浅出篇:Spring中ioc(控制反转)与DI(依赖注入)
Spring5深入浅出篇:Spring中ioc(控制反转)与DI(依赖注入)
|
10天前
|
Java 测试技术 开发者
Spring IoC容器通过依赖注入机制实现控制反转
【4月更文挑战第30天】Spring IoC容器通过依赖注入机制实现控制反转
21 0
|
2月前
|
Java 数据库连接 API
【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】
【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】
54 0
|
10天前
|
安全 Java 开发者
在Spring框架中,IoC和AOP是如何实现的?
【4月更文挑战第30天】在Spring框架中,IoC和AOP是如何实现的?
21 0
|
10天前
|
XML Java 程序员
什么是Spring的IoC容器?
【4月更文挑战第30天】什么是Spring的IoC容器?
19 0
|
13天前
|
Java Spring 容器
【Spring系列笔记】IOC与DI
IoC 和 DI 是面向对象编程中的两个相关概念,它们主要用于解决程序中的依赖管理和解耦问题。 控制反转是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入和依赖查找。
30 2
|
13天前
|
Java 测试技术 数据库连接
Spring中ioc的优点
总之,Spring中的IoC提供了一种更加灵活、可维护、可测试和可扩展的方式来管理组件之间的依赖关系,从而提高了应用程序的质量和可维护性。这使得开发人员能够更专注于业务逻辑而不是底层的技术细节。
32 1
|
16天前
|
设计模式 Java 测试技术
Spring 控制反转与依赖注入
Spring 控制反转与依赖注入
34 10
|
22天前
|
Java 应用服务中间件 Spring
|
23天前
|
XML Java 数据格式
Spring IOC的源码解析
【4月更文挑战第17天】Spring IOC(控制反转)的核心功能是通过依赖注入(DI)来管理对象的创建和它们之间的依赖关系。要深入理解Spring IOC的工作原理,我们可以从其源码分析入手,特别是关注如何创建和管理Bean以及依赖注入的实现
20 1