Spring IOC/DI(一.入门案例)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

一、Spring相关概念

二、IOC/DI概念及入门案例

1.IOC(Inversion of Control)控制反转

2.DI(Dependency Injection)依赖注入

三.入门案例

        IOC入门案例

DI入门案例

bean作用范围scope配置

bean配置小结


一、Spring相关概念

        Spring是使用JavaEE开发的必备使用技能。Spring可以简化开发,并且可以实现框架整合,高效整合其他及技术。

        Spring框架优势主要体现在简化开发 和 框架整合 上,所以这两哥部分是我们学习的重点

  1. 简化开发:Spring框架中提供可两个大的技术。 IOC  以及  AOP
  2. 框架整合:Spring如今已经可以整合市面上几乎所有主流框架

二、IOC/DI概念及入门案例

1.IOC(Inversion of Control)控制反转

        (1).控制反转:即由主动new创建对象转为由 外部 提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。

        (2).SpringIOC之间的关系:Spring技术对IOC思想进行了实现。即Spring提供了一个容器,叫做IOC容器,用来充当 “外部” 。所以IOC思想中的 “外部” 值的就是IOC容器

        (3).IOC容器的作用以及内部存放的是什么

  • IOC容器负责对象的创建、初始化等一系列工作,其中包含了数据层和业务层的类对象
  • 被创建或被管理的对象在IOC容器中统称为Bean

但是,存放在IOC容器中的Bean对象彼此之间并没有任何关系,像这种在容器中建立对象与对象之间的绑定关系就要用到DI

2.DI(Dependency Injection)依赖注入

         依赖注入 在容器中建立 bean bean 之间的依赖关系的整个过程,称为依赖注入 业务层要用数据层的类对象,以前是自己 new 现在自己不 new 了,靠 别人 [ 外部其实指的就是 IOC 容器 ] 来给注入进来 这种思想就是依赖注入

介绍完Spring的IOC和DI的概念后,我们直到它们的最终作用就是:充分解耦

  • 使用IOC容器管理Bean
  • 将IOC容器中具有依赖关系的bean进行绑定
  • 使用对象时不仅可以直接从IOC容器中获取,并且获取到的bean已经绑定了所有的依赖关系   

三.入门案例

        IOC入门案例

需求分析:将BookServiceImplBookDaoImpl交给Spring管理,并从容器中获取对应的bean

对象进行方法调用。
  1. 创建Maven的java项目
  2. pom.xml添加Spring的依赖jar
  3. 创建BookService,BookServiceImplBookDaoBookDaoImpl四个类
  4. resources下添加spring配置文件,并完成bean的配置
  5. 使用Spring提供的接口完成IOC容器的创
  6. 从容器中获取对象进行方法调用

步骤一:创建Maven项目

步骤二:向pom.xml添加Spring的依赖jar

<?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-day01</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <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.13.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

步骤三:创建BookService,BookServiceImplBookDaoBookDaoImpl四个类

        

public interface BookDao { 
    public void save(); 
}

public class BookDaoImpl implements BookDao { 
    public void save() { 
        System.out.println("book dao save ..."); 
    } 
}

public interface BookService { 
    public void save(); 
}

public class BookServiceImpl implements BookService { 
    public void save() { 
        System.out.println("book service save ..."); 
    } 
}

步骤四:添加spring配置文件

步骤五:在配置文件中完成bean的配置

<?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="bookDao" name="bookDaoImpl" class="com.Impl.dao.BookDaoImpl"/>
    <bean id="bookService" class="com.Impl.dao.BookServiceImpl"/>
</beans>

我们此时可以使用 name标签 对bean起别名,我们也可以通过name 获取bean

注意事项:bean定义时id属性在同一个上下文中(配置文件)不能重复

步骤六:获取IOC(使用Spring提供的接口完成IOC容器的创建)

public class Test {
    public static void main(String[] args) {
        //获取对应的IOC容器
        ApplicationContext ctx = 
                new ClassPathXmlApplicationContext("applicationContext.xml");

    }
}
步骤七:从容器中获取对象进行方法调用
public class Test {
    public static void main(String[] args) {
        //获取对应的IOC容器
        ApplicationContext ctx = 
                new ClassPathXmlApplicationContext("applicationContext.xml");
        BookDao bookdao = (BookDao)ctx.getBean("bookDao");
        bookdao.save();

    }
}

DI入门案例

需求 : 基于 IOC 入门案例,在 BookServiceImpl 类中删除 new 对象的方式,使用 Spring DI 完成
Dao 层的注入
    1. 删除业务层中使用 new 的方式创建的 dao 对象
    2. 在业务层提供 BookDao setter 方法
    3. 在配置文件中添加依赖注入的配置
    4. 运行程序调用方法

步骤一:去除代码中的new

public class BookServiceImpl implements BookService{
    //删除业务层中使用new的方式创建Dao对象
    //private BookDao bookdao = new BookDao();
    private BookDao bookDao;
    @Override
    public void save() {
        System.out.println("Book Service save~");
    }
}

步骤二:为属性提供setter方法

public class BookServiceImpl implements BookService{
    //删除业务层中使用new的方式创建Dao对象
    //private BookDao bookdao = new BookDao();
    private BookDao bookDao;
    @Override
    public void save() {
        System.out.println("Book Service save~");
    }

    public void setBookDao(BookDao bookDao){
        this.bookDao = bookDao;
    }
}

步骤三:修改配置完成注入(在配置文件中添加依赖注入的配置)

<?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="bookDao" class="com.Impl.dao.BookDaoImpl"/>
    <bean id="bookService" class="com.Impl.dao.BookServiceImpl">
        <!--配置server与Dao的关系-->
        <!--property标签表示配置当前bean的属性 
    name属性表示配置哪一个具体的属性 ref属性表示参照哪一个bean -->
        <property name="bookDao" ref="bookDao"></property>
    </bean>
</beans>
注意 : 配置中的两个 bookDao 的含义是不一样的
        name="bookDao"中 bookDao 的作用是让 Spring IOC 容器在获取到名称后,将首字母大写,前面加set 找对应的 setBookDao() 方法进行对象注入

bean作用范围scope配置

定义bean的作用范围,可选范围如下:

  • singleton:单例(默认)
  • prototype:非单例

示例:<bean id = "bookDao" class = "com.dao.BookDaoImpl" scope = "prototype"/>

判断IOC容器中对象是否为单例对象?
同一个 bean 获取两次,将对象打印到控制台,看打印出的地址值是否一致。

bean配置小结

关于 bean 的基础配置中,需要掌握以下属性 :
<bean
        id = "bean的唯一标识"
        class = "bean的类全名"
        scope = "bean的作用范围,singleton(默认 单例)和 prototype"
        name = "bean的别名(可取多个)"
/>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值