【笔记】spring 生命周期

什么是控制反转和依赖注入?

  1. 谁控制谁?Ioc容器控制bean的生命周期,由ioc容器来控制bean的初始化、实例化、销毁等,ioc容器即是资源(对象)的管理者。
  2. 控制什么?对象。
  3. 为何要反转?不反转的话,需要资源的使用者手动创建对象,代码耦合度较高,通过反转能够使代码大大解耦。
  4. 哪些方面反转了?创建对象的权力反转了,以前是有资源的使用者开创建对象,现在由ioc容器来创建对象。

依赖注入是手段,控制反转是目的。

Spring中BeanFactory和FactoryBean有什么区别?

BeanFactory是一个bean工厂,也就是IOC容器或对象工厂,FactoryBean是个工厂Bean。在spring中,所有的bean都是由BeanFactory(IOC容器)来管理的。而FactoryBean不是简单的bean,而是一个能生产或者修饰对象生成的工厂bean,它的实现与设计模式中的工厂模式和修饰器模式类似。

BeanFactory定义了IOC容器的最基本形式,并提供了IOC容器应遵守的最基本的接口。spring中有很多种不同类型的BeanFactory,如:ClassPathXmlApplicationContext、AnnotationConfigApplicationContext、ApplicationContext等,即BeanFactory是所有类型的Context的顶级父类。不同的BeanFactory具有不同的功能,一般根据不同场景使用不同的BeanFactory来加载spring容器或者说启动spring容器。

FactoryBean是Spring容器中的一个对象,专门用来创建特殊的对象。一般情况下Spring都是通过反射来创建对象的,但是如果某个对象的创建过程过于复杂或者无法按照传统的方式实例化,就可以使用FactoryBean。通过实现FactoryBean<T>来做复杂或无法按照传统的方式实例化(这时不再用反射)。

@Component
public class UserFactoryBean implements FactoryBean<User> {
    
    @Override
    public User getObject() throws Exception {
        // 可以做一些复杂处理
        return new User(); 
    }

    @Override
    public Class<?> getObjectType() {
        return User.class; 
    }
}

Spring中BeanPostProcessor和BeanFactoryPostProcessor的区别?

BeanPostProcessor:后置处理Bean,它是bean级别的,可以在SpringBean初始化(即bean的生命周期中的初始化方法,使用xml配置、或实现接口、或使用注解@PostConstruct。在对象创建后执行。)之前和之后对应bean或者程序进行增强。通过实现BeanPostProcessor接口并实现其中的方法进行增强。

BeanFactoryPostProcessor:BeanFactory级别,可以在对象工厂(IOC容器)创建对象之前对对象进行修改。

/**
 * @author leven
 * @date 2020/3/18 0:52
 */
@Component
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        System.out.println("--BeanFactoryPostProcessor--");
        AbstractBeanDefinition beanDefinition = (AbstractBeanDefinition) beanFactory.getBeanDefinition("aa");
        beanDefinition.setBeanClass(B.class);
        System.out.println("--BeanFactoryPostProcessor--");
    }
}

JavaBean和SpringBean的区别?

Java对象: 使用new或者其他方式直接创建,由JVM统一管理。一个对象就只有生成这个对象的类中声明的所有属性和功能。

SpringBean:通过反射创建,由IOC容器统一管理,拥有自己类中声明的属性和方法之外还有spring给其增加/修改的属性和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值