Spring----IOC

IOC容器:

在Spring中,IOC 容器是指用于管理对象和依赖关系的容器。Spring提供了多种 IOC 容器实现,包括 BeanFactory 和 ApplicationContext 等。BeanFactory 是 Spring 中最基本的 IOC 容器,它提供了基本的 IOC 功能。ApplicationContext 则是BeanFactory的扩展,它提供了更多的功能,如事件发布、国际化支持、AOP等。在 Spring 中,BeanFactory 和 ApplicationContext 都是通过反射来实例化对象,并通过依赖注入来管理对象之间的依赖关系。
IOC底层主要通过XML解析、工厂模式、反射来实现。spring提供IOC容器的两种实现方式:
(1)BeanFactory:IOC容器的基本实现,Spring内部的使用接口。加载配置文件时候不创建对象,在获取对象才去创建对象。
(2)ApplicationContext:BeanFactory的子接口,提供更多强大的功能,一般使用这个。加载配置文件时候就在配置文件对象进行创建。ApplicationContext的实现类主要为:ClassPathXmlApplicationContext和FileSystemXmlApplicationContext。

//加载配置文件
BeanFactory context=new ClassPathXmlApplicationContext("xxx.xml");

bean定义:
bean管理:1.Spring创建对象 2.Spring注入属性
在 Spring 中,每个被管理的对象都需要有一个对应的 Bean 定义。Bean定义是一个元数据,它描述了一个 Bean 的类型、属性、依赖关系等信息。Bean 定义通常是通过XML配置文件、 Java 配置类或者注解来定义的。下面是一个使用 XML 配置文件定义 Bean 的示例:


    

 

在上面的示例中,我们定义了一个名为 userService的Bean,它的类型是com.example.UserService。它依赖于另一个名为userRepository的Bean,类型是com.example.UserRepositoryImpl。

依赖注入:
在 Spring 中,依赖注入是通过反射来实现的。当 IOC 容器创建 Bean 时,它会检查 Bean 定义中所声明的依赖关系,并尝试通过反射来注入这些依赖关系。依赖注入通常分为三种方式:构造函数注入、Setter 方法注入和字段注入。
(1)构造函数注入
构造函数注入是最常见的依赖注入方式。在 Spring 中,我们可以通过构造函数来注入 Bean 的依赖关系。当 IOC 容器创建 Bean 时,它会检查 Bean 定义中所声明的构造函数,并尝试通过反射来调用这个构造函数,并将依赖关系作为参数传递进去。

public class UserService {
    private final UserRepository userRepository;
 
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
 
    // ...
}

(2)Setter方法注入
Setter 方法注入是另一种常见的依赖注入方式。我们可以通过 Setter 方法来注入Bean的依赖关系。当 IOC 容器创建Bean时,它会检查 Bean 定义中所声明的 Setter 方法,并尝试通过反射来调用这个 Setter 方法,并将依赖关系作为参数传递进去。

public class UserService {
    private UserRepository userRepository;
 
    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
 
    // ...
}

(3)字段注入
字段注入是一种不太常见的依赖注入方式。可以通过字段来注入Bean的依赖关系。当 IOC 容器创建 Bean 时,它会尝试通过反射来注入这些字段。

public class UserService {
    @Autowired
    private UserRepository userRepository;
 
    // ...
}

bean生命周期:
第一步:实例化Bean
第二步:Bean属性赋值
第三步:执行“Bean后处理器”的before方法
第四步:初始化Bean
第五步:执行“Bean后处理器”的after方法
第六步:使用Bean
第七步:销毁Bean
实例化:Bean 实例化之后,Spring 会调用 BeanPostProcessor 的 postProcessBeforeInitialization 方法。
属性赋值:在Bean实例化之后,Spring 会将 Bean 定义中所声明的属性值赋值给 Bean 对象。
初始化:在 Bean 属性赋值之后,Spring 会调用 InitializingBean 的 afterPropertiesSet 方法或者 @Bean 注解的 initMethod 方法。
销毁:在 IOC 容器关闭时,Spring 会调用 DisposableBean 的 destroy 方法或者 @Bean 注解的 destroyMethod方 法。

你可能感兴趣的:(spring,java,后端)