• Spring入门程序(二)


    文章目录

    一、IOC理论推导

    1.案例

    1.BookDao接口

    package com.study.dao;
    
    public interface BookDao  {
        void save();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.BookDaoImpl实现类

    package com.study.dao.impl;
    import com.study.dao.BookDao;
    public class BookDaoImpl implements BookDao {
        public void save() {
            System.out.println("book dao save...");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3.BookService接口

    package com.study.service;
    public interface BookService {
        void save();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4.BookServiceImpl实现类

    package com.study.service.impl;
    
    import com.study.dao.BookDao;
    import com.study.dao.impl.BookDaoImpl;
    import com.study.service.BookService;
    
    public class BookServiceImpl implements BookService {
        BookDao b=new BookSerciveImpl();
        public void save() {
            System.out.println("book service save...");
            b.save();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    5.Test测试类

    import com.study.service.BookService;
    import com.study.service.impl.BookServiceImpl;
    
    public class Test {
        public static void main(String[] args) {
            BookService bs=new BookServiceImpl();
            bs.save();
        }
    }
    /*
    book service save...
    book dao save...
     */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2.缺点

    程序是主动创建对象!控制权在程序猿手上!
    在这里插入图片描述

    二、IoC

    1.IoC本质

    控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法。没有IoC的程序中,我们使用面向对象编程,对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓控制反转就是:获得依赖对象的方式反转了。

    采用XML方式配置Bean的时候,Bean的定义信息是和实现分离的,而采用注解的方式可以把两者合为一体,Bean的定义信息直接以注解的形式定义在实现类中,从而达到了零配置的目的。
    控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)。
    在这里插入图片描述

    2.Set方式注入

    • 依赖注入:Set注入
    • 依赖:bean对象的创建依赖于容器!
    • 注入:bean对象中的所有属性,由容器来注入!
    • 使用了set注入后,程序不再具有主动性,而是变成了被动的接收对象!
      这种思想,从本质上解决了问题,我们程序猿不用再去管理对象的创建了。系统的耦合性大大降低~,可以更加专注的在业务的实现上!这是IOC的原型!

    3.作用

    在这里插入图片描述

    三、Spring入门程序

    改进1.案例
    导入坐标:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>org.example</groupId>
        <artifactId>Spring-Demo</artifactId>
        <version>1.0-SNAPSHOT</version>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.2.10.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    applicationContext.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">
    <!--1.导入Spring坐标-->
    <!--2.配置Bean,通过bean标识配置bean-->
        <!--id属性给Bean起名字
        class属性定义类型-->
        <bean id="bookDao" class="com.study.dao.impl.BookDaoImpl"></bean>
        <bean id="bookService" class="com.study.service.impl.BookServiceImpl">
            <property name="b" ref="bookDao"></property>
        </bean>
    
    </beans>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    1.BookDao接口

    package com.study.dao;
    
    public interface BookDao  {
        void save();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.BookDaoImpl实现类

    package com.study.dao.impl;
    import com.study.dao.BookDao;
    public class BookDaoImpl implements BookDao {
        public void save() {
            System.out.println("book dao save...");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3.BookService接口

    package com.study.service;
    public interface BookService {
        void save();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4.BookServiceImpl实现类

    package com.study.service.impl;
    
    import com.study.dao.BookDao;
    import com.study.dao.impl.BookDaoImpl;
    import com.study.service.BookService;
    
    public class BookServiceImpl implements BookService {
         private BookDao b;
        public void save() {
            System.out.println("book service save...");
            b.save();
        }
    
        public void setB(BookDao b) {
            this.b = b;
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    5.Test测试类

    import com.study.service.BookService;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class Test2 {
        public static void main(String[] args) {
            //获取IOC容器
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
            //获取Bean
            BookService bs = (BookService) context.getBean("bookService");
            bs.save();
        }
    }
    /*
    book service save...
    book dao save...
     */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 相关阅读:
    Redis应用(8)——Redis的项目应用:结合SpringBoot如何在Redis里面存对象 & RedisUtil工具类的封装 & 遇到的问题
    浅谈前端自定义VectorGrid矢量瓦片样式
    微服务自动化【Docker-Compose】
    openvino_datawhale
    html支持网络串流flv视频播放
    如何做好项目规划?以及项目规划常用的管理软件盘点
    FreeSql 导入数据的各种场景总结 [C#.NET ORM]
    Effective C++ 阅读笔记 01:让自己习惯C++
    疑似openAI的BUG
    数据库备份
  • 原文地址:https://blog.csdn.net/qq_43514330/article/details/125411397