codeglory
codeglory
发布于 2023-09-24 / 19 阅读 / 0 评论 / 0 点赞

Spring核心特性之一-IOC控制反转

1、IOC理论的由来与分析

新建userDao ,新建userDaoImpl层如下结构

因为业务变更,想要能够能够适配mysql查询的dao层数据。或者增加orcale数据dao层数据。就要修改原来的接口层,声明对应继承dao层。需要大量修改业务层(service)数据

修改如下:接口业务层中增加setUserDao方式。

private UserDao userDao ;
// 利用set进行动态实现值的输入。
public void setUserDao(UserDao userDao) {
    this.userDao = userDao;
}

使用了set接口实现,已经发了革命性的变化。

  • 之前,程序是主动创建对象!控制权在程序员手上。

  • 使用了set注入之后,程序不再具有主动性,而是变成了被动的接收对象!

这种思想,从本质上解决了问题,程序的不再管理对象的创建了,系统的耦合性大大降低,使程序员更加关注到业务上。


2、IOC概念

IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。

Spring 通过 IoC 容器来管理所有 Java 对象的实例化和初始化,控制对象与对象之间的依赖关系。我们将由 IoC 容器管理的 Java 对象称为 Spring Bean,它与使用关键字 new 创建的 Java 对象没有任何区别。

IoC 容器是 Spring 框架中最重要的核心组件之一,它贯穿了 Spring 从诞生到成长的整个过程。

控制:谁来控制对象的创建,传统的应用程序是由程序本身控创建的,使用Spring后,对象是由Spring创建的。

反转:程序本身不创建对象,而变成被动接受对象。

依赖注入:就是set方式发来注入的

IOC是一种编程思想,由主动的变成被动接受。

所谓IOC,就是一句话:对象由Spring管理,创建,装配。

resource 创建完Beans.xml配置如下

<bean id="hello" class="com.caohz.hello.Hello">
    <property name="str" value="helloWorld"/>
</bean>
public class TestJava {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("hellobeans.xml");
        Hello hello = (Hello) context.getBean("hello");
        System.out.println(hello.toString());
    }
}

3、IOC对象的创建

3.1 、默认使用无参构造函数创建对象

<bean id="user" class="com.caohz.pojo.User">
    <property name="name" value="codeglory"/>
</bean>

可以看成如下创建User user = new User("codeglory");

3.2、 如果使用有参数构造函数

1)下标复制

<bean id="user" class="com.caohz.pojo.User">
    <!--第一种方式 下标方式-->
    <constructor-arg index="0" value="下标赋值"/>
</bean>

2)数据类型赋值

<bean id="user" class="com.caohz.pojo.User">
    <!--第二种方式 下标方式-->
    <constructor-arg type="java.lang.String" value="数据类型赋值"/>
</bean>

3)使用名称赋值

<bean id="user" class="com.caohz.pojo.User">
    <!--第三种方式 名称赋值方式-->
    <constructor-arg name="name" value="名称赋值方式"/>
</bean>


评论