Spring---Annotation注释和Bean生命周期笔记---查询资料

本文介绍了Spring框架中Bean的注册方式,包括包扫描、@Bean注解、@Import指令及FactoryBean的使用方法。同时详细阐述了Bean的生命周期,从创建到初始化再到销毁的过程,以及如何自定义初始化和销毁方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文仅做查询资料,不对细节进行论述

一、常用注释

@Configuration:一般用在IOC配置@Bean类头
@Bean:
    IOC注入对象,无论@ComponentScan扫没扫到
@ComponentScan:
    扫描文件@Controller,@Service,@Repository,@Component
    自动扫描组件&指定扫描规则;
    自定义TypeFilter指定过滤规则;
@Scope:
    没用@Scope("prototype"),所有@Bean默认为单实例,在IOC容器启动时候创建Bean
    使用了@Scope("prototype"),@Bean为非单例,在IOC容器启动后创建Bean,调用时候才执行Bean构造函数
@Lazy:
    针对上述@Bean没有用@Scope时,可以让Bean在IOC容器启动后创建,调用时候才执行Bean构造函数
@Conditional:(SpringBoot底层大量使用)
    按照一定条件进行判断,满足条件给容器中注册bean
    @Conditional({LinuxCondition.class})
    @Bean("linus"):表示只有linux环境才生效Bean
    也可以配置在Config类头,表示整个类在某个条件下的Bean才生效
    
小结:
    给容器中注册组件的方法:
        1)包扫描+组件标注注解(@Controller/@Service/@Repository/@Component[局限在自己写的类])
        2)@Bean[导入第三方包里面的组件]
        3)@Import[快速给容器中导入一个组件]详情见Color
            a)@Import(要导入到容器中的组件):容器中就会自动注册这个组件,id默认是全类名
            b)ImportSelector:返回需要导入的组件的全类名数组
            c)ImportBeanDefinitionRegistrar,自定义手工注册,例如:查找注册类中是否有Red和Blue,如果有的话注册yellow
        4)使用Spring提供才FactoryBean(工厂Bean),做框架整合时候用的多
            a)默认获取到的是工厂bean调用getOject创建的对象
            b)要获取工厂Bean本身,我们需要给id前面加一个&
            &colorFactoryBean


二、bean生命周期:


    创建---初始化---销毁
    容器管理bean的生命周期
    我们可以自定义初始化和销毁方法:容器在bean进行到当前生命周期的时候来调用
    我们自定义的初始化和销毁方法

    构造(对象创建)
        单实例:在容器启动的时候创建对象
        多实例:在每次获取的时候创建对象
    
    初始化:
        对象创建完成,并赋值好,调用初始化方法
    销毁:
        单实例:容器关闭的时候
        多实例:容器不会管理这个bean;不会调用销毁方法

    1)指定初始化销毁方法
        通过@Bean指定init-method和destroy-method;(BeanLifeCycleConfig)
    2)通过让Bean实现InitializingBean,DisposableBean(定义初始化和销毁)(Cat类)
    3)使用JSR250:
        @PostConstruct:在Bean创建完成,并且属性赋值完成;来执行初始化(Dog类)
        @PreDestroy:在容器销毁bean之前通知我们进行清理工作
        javax.annotation.*;
    4)BeanPostProcessor[interface],bean的初始化后置处理器;
        在bean的初始化前后进行一些处理工作;(参考MyBeanPostProcessor类)
        postProcessBeforeInitialization,在任何初始化调用之前工作(InitializingBean);
        postProcessAfterInitialization,在初始化之后工作;
        结果如下:
            Cat constructor...
            MyBeanPostProcessor.postProcessBeforeInitialization...cat=> spring.com.bean.Cat@4450d156
            Cat InitializingBean.afterPropertiesSet...(init)
            MyBeanPostProcessor.postProcessAfterInitialization...cat=> spring.com.bean.Cat@4450d156

 

BeanPostProcessor是Spring底层使用非常频繁的接口,如:

     bean赋值,注入其他组件,@Autowired,生命周期注释功能,@Async等等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值