【返璞归真】Spring源码阅读一:组件注册

想要查看前面的笔记请翻阅我的CSDN博客,作者码字不易,喜欢的话点赞,加个关注吧,后期还有很多干货等着你!


一、@Configuration&@Bean给容器中注册组件

@Configuration注解声明配置类、@Bean注解向容器中注册Bean,默认使用方法名作为id

二、@ComponentScan注解进行包扫描

指定包路径,就可以自动将添加了:@Controller、@Service、@Repository、@Component的类注册到容器中管理,并且可以配置相对应的规则(FiterType属性进行指定规则类型),进行排除或者是只导入某种类型的包。

三、@Scope设置组件的作用域

容器中默认是单实例Bean,可以使用@Scope中指定Bean的作用域(常用属性:prototype:多实例,singleton单实例(默认值),request:同一请求创建一个实例(不常用,通常放在请求域中),session:同一session创建一个实例(不常用,通常放在session中))

四、@Lazy-bean懒加载(针对于单实例Bean)

对于单实例Bean,会在容器启动的时候创建Bean,如果我们需要进行懒加载(比如不常用的Bean,不想让他消耗虚拟机内存),就可以在@Bean注解之上添加@Lazy-bean

五、@Conditional按照条件注册Bean

当前注解在源码中大量应用,作用是:你可以根据属性的条件,有选择的注册Bean,你可以放在类上或者是放在方法上,代码中应用广泛(比如多数据源配置,比如数据源的选择),
使用方式有很多,默认提供了Condition接口进行实现。还有一些拓展注解如:
Condition注解的其他拓展

六、@import给容器快速导入一个类

三种用法:

  1. 可以使用这个注解添加在类上,属性为需要倒入的类(单个倒入传入需要倒入的类,多个导入传入一个类数组),id为组件的全类名
  2. 实现一个提供的接口:ImportSelector,返回值是一个String[],元素为全类名
  3. 实现一个提供的接口:ImportBeanDefinitionRegistrar,没有返回值,有一个需要实现的方法(registerBeanDefinitions),方法参数中,提供了BeanDefinitionRegistry对象,可以自己进行Bean的注册(BeanDefinitionRegistry.registerBeanDefinition方法手动注册)

七、使用Spring提供的FactoryBean注册

实现接口:FactoryBean,会有三个方法需要实现:getObject()(注册Bean)、getObjectType()(返回Bean类型)、isSingleton()(Bean是否单例)。实现后,需要将你实现FactoryBean的类注册到容器中,这样就可以获取到对应的Bean了,注意这时候Bean的名称是你的工厂Bean的名称,但是类型是你getObjectType()返回的类型。

おすすめ

転載: blog.csdn.net/weixin_42842069/article/details/121443887