Spring IOC容器

7 篇文章 0 订阅

Spring

控制反转:IOC

​ 理解:反转资源获取方向。把自己创建资源变成环境将资源准备好,我们享受资源注入。

面向切面编程:AOP

​ 理解:在不修改源代码的基础上增强代码功能。

容器:Spring IOC

​ 理解: 是一个容器,因为它包含并且管理组件对象的生命周期。组件享受到了容器化的管理,替程序员屏蔽了组件创建过程中的大量细节,极大的降低了使用门槛,大幅度提高了开发效率。

1. 普通容器

普通容器只是负责存储数据(对象):数组、List、Map等等

2. 复杂容器

复杂容器不仅要负责存储对象,还需要具备创建对象、调用对象方法、管理对象生命周期、并且在一定情况下负责销毁对象----------Tomcat就是一个复杂容器,它能够负责创建Servlet、Filter、Listener等等对象,并且管理他们的生命周期

IOC的概念

我们传统的创建方式就是要哪个方法就创建那个方法,这样就导致耦合度偏高

IOC方式创建对象:将对象的创建反转给spring框架来创建和管理,把对象创建的工作交给spring容器去维护。我们只需要告诉spring容器我们需要什么对象即可

IOC的作用:消减计算机程序的耦合

IOC容器在Spring中的实现

​ spring提供两种实现方式

①BeanFactory ,此实现面向spring框架内部本身使用,不提供开发者使用(封装的)

②ApplicationContext :提高了更高级方法,几乎所有的场合都使用比 BeanFactory方法多

ApplicationContext的主要实现类

类名简介
ClassPathXmlApplicationContext通过读取类路径下的 XML 格式的配置文件创建 IOC 容器对象
AnnotationConfigApplicationContext可以实现基于Java的配置类加载Spring的应用上下文,创建IOC容器对象
WebApplicationContext专门为 Web 应用准备,基于 Web 环境创建 IOC 容器对象,并将对象引用存入 ServletContext 域中。

Spring IOC快速入门

​ springIOC容器创建类的对象,并从中获取对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yDCbWjN7-1639744887607)(img/001.jpg)]

在配置文件的时候

<?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属性: 对象的唯一标识,根据这个唯一标识,就可以从核心容器中获取对象
            class属性: 对象所属的实现类的全限定名
    -->
    <bean id="happyComponent" class="com.atguigu.ioc.component.HappyComponent"/>
</beans>

bean标签:告诉ioc容器需要创建对象的组件是什么

id属性:bean的唯一标识

class属性:组件类全类名

如何从核心容器里面获取对象

方式一:

根据id获取

// 创建 IOC 容器对象,为便于其他实验方法使用声明为成员变量
private ApplicationContext iocContainer = new ClassPathXmlApplicationContext("applicationContext.xml");
     @Test
    public void testExperiment01() {
        // 从 IOC 容器对象中获取bean,也就是组件对象     .getbean(id)
        HappyComponent happyComponent = (HappyComponent) iocContainer.getBean("happyComponent");
        happyComponent.doWork();
    }

方式二:

根据类型获取

@Test
public void testExperiment02() {
    
    HappyComponent component = iocContainer.getBean(HappyComponent.class);
    
    component.doWork();
    
}

方式二会抛下异常

org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type ‘com.atguigu.ioc.component.HappyComponent’ available: expected single matching bean but found 2: happyComponent,happyComponent2

注意:::

​ 如果组件类型,实现接口,这些类型都配了唯一的bean对象,可以获取bean对象

配置文件方式

写一个方法,然后在xml文件里面扫描方法,给唯一的id,然后

ApplicationContext act = new ClassPathXmlApplicationContext(“配置文件路径”)

act.getBean()

  • 给一个对象的成员变量赋值的方式:
    1. 调用set方法
    1. 通过构造器
    1. 通过暴力反射

依赖注入:

构造函数:

​ 前提是当前类有对应的带参数的构造函数

​ 标签

​ name属性:对应构造函数的参数名

​ value:注入简单类型的值

​ ref:注入Bean的id

​ set方法:

​ 前提是要注入的属性有对应的set方法

​ 标签

​ name属性:对应set方法的名字

​ value:注入简单类型的值

​ ref:注入Bean的id

p命名空间:

​ 前提是要注入的属性有对应的set方法

​ 在spring的配置文件中引入p

​ 在bean标签上添加属性

​ p:属性名=

​ p:属性名-ref=

Bean的生命周期
bean的生命周期清单
  • bean对象创建(调用无参构造器)
  • 给bean对象设置属性(依赖注入)
  • bean对象初始化之前操作(由bean的后置处理器前置方法负责)
  • bean对象初始化(需在配置bean时指定初始化方法)
  • bean对象初始化之后操作(由bean的后置处理器后置方法负责)
  • bean对象就绪可以使用
  • bean对象销毁(需在配置bean时指定销毁方法)
  • IOC容器关闭
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值