Java开发学习(九)----IOC之核心容器

这里所说的核心容器,大家可以把它简单的理解为 ApplicationContext ,前面虽然已经用到过,但是并没有系统的介绍过,接下来咱们从以下几个问题入手来下容器的相关知识:

  • 如何创建容器?

  • 创建好容器后,如何从容器中获取bean对象?

  • 容器类的层次结构是什么?

  • BeanFactory是什么?

一、环境准备

在解决上述问题之前,先来准备下环境:

  • 创建一个Maven项目

  • pom.xml添加Spring的依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>
    </dependencies>
  • resources下添加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">
        <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
    </beans>
  • 添加BookDao和BookDaoImpl类

    public interface BookDao {
        public void save();
    }
    public class BookDaoImpl implements BookDao {
        public void save() {
            System.out.println("book dao save ..." );
        }
    }
  • 创建运行类App

    public class App {
        public static void main(String[] args) {
            ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
            BookDao bookDao = (BookDao) ctx.getBean("bookDao");
            bookDao.save();
        }
    }

最终创建好的项目结构如下:

二、容器

2.1 容器的创建方式

案例中创建 ApplicationContext 的方式为:

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

这种方式翻译为: 类路径下的XML配置文件

除了上面这种方式,Spring还提供了另外一种创建方式为:

ApplicationContext ctx = new FileSystemXmlApplicationContext("applicationContext.xml");

这种方式翻译为: 文件系统下的XML配置文件

使用这种方式,运行,会出现如下错误:

从错误信息中能发现,这种方式是从项目路径下开始查找 applicationContext.xml 配置文件的,所以需要将其修改为文件具体的路径所在

说明: 大家练习的时候,写自己的具体路径。 这种方式虽能实现,但是当项目的位置发生变化后,代码也需要跟着改,耦合度较高,不推荐使用。

2.2 Bean的三种获取方式

方式一,就是上面代码中获取的方式:

BookDao bookDao = (BookDao) ctx.getBean("bookDao");

这种方式存在的问题是每次获取的时候都需要进行类型转换,有没有更简单的方式呢?

方式二:

BookDao bookDao = ctx.getBean("bookDao",BookDao.class);

这种方式可以解决类型强转问题,但是参数又多加了一个,相对来说没有简化多少。

方式三:

BookDao bookDao = ctx.getBean(BookDao.class);

这种方式就类似我们之前所学习依赖注入中的按类型注入。必须要确保IOC容器中该类型对应的bean对象只能有一个。

2.3 容器类层次结构

(1)在IDEA中双击 shift ,输入BeanFactory,如果没找到的话请勾选Include non-project items选项

(2)点击进入BeanFactory类, ctrl+h ,就能查看到如下结构的层次关系

从图中可以看出,容器类也是从无到有根据需要一层层叠加上来的。

2.4 BeanFactory的使用

使用BeanFactory来创建IOC容器的具体实现方式为:

public class AppForBeanFactory {
    public static void main(String[] args) {
        Resource resources = new ClassPathResource("applicationContext.xml");
        BeanFactory bf = new XmlBeanFactory(resources);
        BookDao bookDao = bf.getBean(BookDao.class);
        bookDao.save();
    }
}

为了更好的看出 BeanFactory 和 ApplicationContext 之间的区别,在BookDaoImpl添加如下构造函数:

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

如果不去获取bean对象,打印会发现:

  • BeanFactory是延迟加载,只有在获取bean对象的时候才会去创建

  • ApplicationContext是立即加载,容器加载的时候就会创建bean对象

  • ApplicationContext要想成为延迟加载,只需要按照如下方式进行配置

    <?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.itheima.dao.impl.BookDaoImpl"  lazy-init="true"/>
    </beans>

三、核心容器总结

3.1 容器相关

  • BeanFactory是IoC容器的顶层接口,初始化BeanFactory对象时,加载的bean延迟加载

  • ApplicationContext接口是Spring容器的核心接口,初始化时bean立即加载

  • ApplicationContext接口提供基础的bean操作相关方法,通过其他接口扩展其功能

  • ApplicationContext接口常用初始化类

    • ClassPathXmlApplicationContext(常用)

    • FileSystemXmlApplicationContext

3.2 bean相关

其实整个配置中最常用的就两个属性 id 和 class 。

3.3 依赖注入相关

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring框架文档-核心技术部分是Spring官方提供的文档,用于指导开发人员学习和使用Spring框架的核心技术。该文档以教程的形式呈现,详细介绍了Spring框架的各个核心模块和相关技术。 该文档主要包括以下内容: 1. IoC容器:介绍了Spring的IoC(Inversion of Control)容器,解释了IoC的概念和作用。同时,通过示例代码详细说明了如何配置和使用IoC容器,以及如何通过IoC容器实现应用程序组件之间的解耦。 2. Bean:介绍了Spring框架的Bean概念和相关技术。文档解释了如何通过配置文件或注解的方式定义Bean,并说明了如何在应用程序使用和管理Bean。 3. AOP:介绍了Spring框架的AOP(Aspect Oriented Programming)技术,解释了AOP的概念和作用。文档详细说明了如何通过配置文件或注解的方式定义切面和通知,并演示了如何将切面应用到应用程序的特定方法或类上。 4. JDBC:介绍了Spring框架对JDBC(Java Database Connectivity)的集成支持。文档详细说明了如何使用Spring的JdbcTemplate和NamedParameterJdbcTemplate等API简化数据库访问操作,并提供了示例代码说明。 5. 事务管理:介绍了Spring框架对事务管理的支持。文档解释了如何配置和使用Spring的声明式事务,以及如何控制事务的传播行为和隔离级别。 6. Web技术集成:介绍了Spring框架在Web开发的支持。文档说明了如何使用Spring MVC框架构建Web应用程序,以及如何通过Spring的Web模块集成其他Web技术,如Servlet、JSP和WebSocket等。 通过阅读和理解这些文档,开发人员可以深入了解Spring框架的核心技术,并准确地应用到实际项目开发。-

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值