决战圣地玛丽乔亚Day41 Spring其余部分

Posted Dva清流

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了决战圣地玛丽乔亚Day41 Spring其余部分相关的知识,希望对你有一定的参考价值。

扩展点:

BeanPostProcessor:在 Bean 初始化前后进行一些处理,常用于 AOP 功能的实现。

postProcessBeforeInitialization(初始化bean前)

postProcessAfterInitialization(初始化bean后)

BeanDefinitionRegistryPostProcessor

可以向 BeanFactory 动态注册 BeanDefinition,也可以修改已经注册的 BeanDefinition。这个在BeanFactoryPostProcessor之前进行,是在refresh的invokeBeanFactoryPostProcessors中进行处理。

执行顺序:

BeanDefinitionRegistryPostProcessor > BeanFactoryPostProcessor > BeanPostProcessor

使用的方法:

1.实现 BeanDefinitionRegistryPostProcessor 接口,重写其 postProcessBeanDefinitionRegistry 方法

允许在BeanFactoryPostProcessor执行之前调用,对BeanDefinition对象进行增删改查操作

public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor 
    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException 
        // 在这里可以添加新的 BeanDefinition 或修改已有的 BeanDefinition
    
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException 
    


//将该类注册为 Spring 的 Bean,在 Spring 容器启动时会自动调用其     
   postProcessBeanDefinitionRegistry 方法。    


@Configuration
public class AppConfig 
    @Bean
    public static MyBeanDefinitionRegistryPostProcessor myBeanDefinitionRegistryPostProcessor() 
        return new MyBeanDefinitionRegistryPostProcessor();
    

tips:需要注意的是,如果我们在 postProcessBeanDefinitionRegistry 方法中添加了新的 BeanDefinition,那么这些 BeanDefinition 不会立即被实例化,而是需要等到下一次的 BeanFactoryPostProcessor 处理完成后才会被实例化。因此,如果我们需要在应用中使用这些新的 Bean,需要确保这些 Bean 已经被实例化。

需要注意一个问题:

 

 

 BeanDefinitionRegistryPostProcessor 接口是继承的BeanFactoryPostProcessor

 

BeanFactoryPostProcessor

postProcessBeanFactory方法,在bean的实例化之前,对beanFactory进行一些后置操作。

 

InstantiationAwareBeanPostProcessor:在 Bean 实例化之前和之后进行一些处理,可以对 Bean 进行定制化的实例化。

ApplicationListener:用于监听 Spring 事件,当事件发生时可以进行一些处理。

InitializingBeanDisposableBean:分别在 Bean 初始化和销毁时被调用。

@PostConstruct 和 @PreDestroy:分别在 Bean 初始化和销毁时被调用,通过注解方式来实现。

@Autowired 和 @Resource:用于实现自动装配。

 

 

 

如何控制事务?

事务的传播机制

多线程事务的处理

IOC和AOP

循环依赖的问题是怎么产生的,如何解决?

懒加载和饿汉加载的区别和应用

单例/多例模式的实现

 

以上是关于决战圣地玛丽乔亚Day41 Spring其余部分的主要内容,如果未能解决你的问题,请参考以下文章

决战圣地玛丽乔亚Day37----JDK

决战圣地玛丽乔亚Day51---消息队列RocketMQ

决战圣地玛丽乔亚Day38---JVM相关

决战圣地玛丽乔亚Day53-----分布式原理与RPC之服务治理与基本原理

Docker决战到底 使用多阶段构建Spring Boot应用镜像

如何在 CSS 的其余部分同时显示在 CSS 中加载的背景图像