spring 学习笔记:一些注解

一 背景:

随着SpringBoot的流行,我们现在更多采用基于注解式的配置从而替换掉了基于XML的配置,整理下,备用:

二 注解:

   依赖:BeanFactory ,提供了getbean的方法,有按类型( by type)获取 Bean 的,也有按 名称( by name)获取 Bean 的。

默认是isSingleton 方法。就是只取出一个,如果是isPrototype 方法,则每次取出不同的bean.

@Bean

@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。需要在@Configuration注解下进行创建

装配bean

如果一个个的 Bean 使用注解@Bean 注入 Spring loC 容器中,很麻烦。Spring 还允许我们进行扫描装配 Bean 到 loC 容器中,@Component 是标明l哪个类被扫描进入 Spring IoC 容器,而@ComponentScan 则是标明采用何种策略去扫描装配 Bean。

依赖注入:

上面只讨论了如 何将 Bean 装配到 IOC容器中,对于bean之间的 依赖,称为依赖注入:Dependency Injection,利用反射机制为类的属性赋值的操作。这个词有点绕,主要是注入某个对象所需要的外部资源。注入发生时间?在完成对象的创建,为对象变量进行赋值的时候进行注入.

对应的注解就是@Autowired。很常见,如 setter方法,constructors方法。它会根据属性的类型(bytype)找到对应的 Bean进行注入。对于同一个接口不同的实现子类出现冲突的情况,消除歧义性一一@ Primary 和@ Quelifier。其中@ Primary 用于指定多个相同类型bean中,在没有指定候选bean的情况下默认注入的bean多个都有@ Primary的情况下,还是需要Quelifier。它的配置项 value需要一个字符串去定义,也就是指定ByName。

生命周期:

  大致分为 Bean 定义、 Bean的初始化、 B巳an的生存期和Bean的销毁4个部分。

  • Spring通过我们的配置,如@ComponentScan 定义的扫描路径去找到带有@Component 的类, 这个过程就是一个资源定位的过程 。一旦找到了资源,那么它就开始解析,并把 Bean 定义发布到 Spring IoC 容器中,此时只有bean定义,并没有初始化,没有bean实例生成 。

网上有人详细整理了这个流程:推荐 https://www.jianshu.com/p/70b935f2b3fe

条件装配:@Conditional 暂时没有用到。

bean 的作用域:

单例( Singleton)和原型( Prototype)。默认的是单例。

环境:习惯不用@Profile,多套环境如dev,beta,等

通常是分环境配置不同的配置文件,然后CI、CD会根据选择发布的环境对应的去打包。

根据配置文件获取参数。

@Value

实际上随着动态配置的使用,Apollo 这种在实际应用中会更广泛,起码不用重启应用了。


   

发布了521 篇原创文章 · 获赞 94 · 访问量 56万+

猜你喜欢

转载自blog.csdn.net/bohu83/article/details/103660976