IOC推导-2021-02-18

1、IOC推导

public class UserServiceImplimplements UserService{

     //第一种,直接new对象,每次新增都需要修改源代码

    //private UserDao userDao = new UserMysqlDaoImpl();

    //private UserDao userDao = new UserDaoImpl();

    //第二种,set动态注入,不用修改源代码,注入的时候修改

    private  UserDaouserDao;

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

    public void getUser(){userDao.getUser(); }

}

public class MyTest {

public static void main(String[] args) {

        UserServiceImpl service =new UserServiceImpl();

        //service.setUserDao(new UserMysqlDaoImpl());

        service.setUserDao(new UserOracleDaoImpl());

        service.getUser();

    }

}

根据用户需求修改源代码,代码量大的话,修改工作量大。使用set接口实现,革命性变化。

之前,程序是主动的,控制权在程序猿手上。使用set之后,程序不再具有主动性,而是被动接收对象。

这种思想从根本上解决问题,程序猿不用在管理对象的创建了,系统耦合性降低,专注业务实现。

2、IOC本质


主动权变更


IOC本质


IOC管理对象

xml方式配置Bean,Bean的定义和实现分离,而注解方式两者合一,Bean的定义信息直接以注解的形式定义在实现类中从而达到零配置的目的。

控制反转是一种通过描述(xml或注解)并通过第三方生产或获取特定对象的方式。Spring中实现控制反转的是IOC容器,其实现方式是依赖注入(DI)。

3、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">

    <!--spring创建对象Hello hello = new Hello();

    id 变量名    class new的对象    property 给对象属性设置值-->

    <bean id="hello" class="com.kuang.pojo.Hello">

      <property name="name" value="Spring">

    </bean>

    <!--spring创建对象 ref 引用的对象 value 基本类型-->

    <bean id="mysqlDaoImpl" class="com.kuang.dao.UserMysqlDaoImpl"/>

    <bean id="oracleDaoImpl" class="com.kuang.dao.UserOracleDaoImpl"/>

    <bean id="userService" class="com.kuang.service.UserServiceImpl">

         <property name="userDao" ref="mysqlDaoImpl">

     </bean>

</beans>

spring创建对象,对象属性在spring容器中设置,这个过程叫做控制反转。

控制指谁来控制对象创建,传统对象由程序本身创建,使用spring后由spring创建。

反转指程序本身不创建对象,变成被动接收对象。

依赖注入就是set方法进行注入的。

调用

//spring上下文对象

ApplicationContext applicationContext  =new ClassPathXmlApplicationContext("beans.xml");

//spring中获取对象

Hello hello = (Hello) applicationContext.getBean("hello");

System.out.println(hello);

IOC就是对象由spring创建、管理、装配

以上参考,kuangshen视频。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容