SpringBoot对Bean的管理

Bean扫描

Spring中使用标签扫描或者注解

Springboot中没有使用标签或者注解它是怎么扫描的我的controlelr,service等等

核心在于springboot启动类中的@SpringBootApplication注解

此注解其实是一个组合注解

它组合了一个@ComponentScan注解,相当于在启动类也添加了这个注解,所以不需要我们手动添加也可以扫描

但是我们没有设置它的扫描范围它是怎么扫描的呢,那是因为,它的默认扫描范围是添加了该注解的类所在的包及其子包

如果想要扫描到启动类所在包之外的包,需要手动在启动类中配置@ComponentScan

Bean注册

如果要注册的bean对象来自第三方(不是自定义的),是无法用@Component及衍生注解声明bean的

使用Maven命名将第三方jar安装到本地仓库

然后win + R-->cmd输入脚本

在pom.xml中引入依赖

@Bean

  • 在启动类中创建一个方法,次方法只需要返回一个对象就行(不推荐使用)

测试

如果想要通过名字来获取直接写方法名

对象默认的的名字就是:方法名

自定义名字@Bean(“自己取名字”)

  • 创建一个配置类,在配置类里面集中注册

使用@ Configuration来标识当前类是一个配置类

配置类也需要放到启动类所在的包或子包下才会被扫描

在配置类中添加一模一样的方法

注入多个第三方对象,在配置中继续写方法

如果方法的内部需要使用到ioc容器中已经存在的bean对象,那么只需要在方式上声明,以参数的形式传入,spring会自动注入

@Import

在启动类上使用@Import(xxx.class),导入一个其他类,spring会自动把xxx类注入到ioc容器中,这里的xxx类可以是任意类(普通类,配置类)

常用的类

       导入配置类

       导入ImportSelector接口实现类

配置类

@Import(配置类.class)

一旦用了@Import相当于我在手动扫描这个类,没有用自动扫描,所以当配置类没有在启动类的包或子包下也能扫描到

注入多个配置类

不推荐,建议使用导入ImportSelector接口实现类

@Import({配置类.class ,配置类.class ,配置类.class ,配置类.class })

ImportSelector接口实现类

定义一个类去实现ImportSelector接口,重写selectImports()方法

Springboot会自动调用selectImports()方法,得到全限定名的数组,然后把这些类的bean对象自动注入到ioc容器中

为了防止硬编码,这些全限定名一般写入文件中,然后从文件中读取出来

文件中的一个全限定名写一行

优化@Import注解

在启动类上使用@Import(CommonImportSelector.class),感觉不好看,

能不能像@SpringBootApplication这样

自定义一个注解

需要复制

@Target({ElementType.TYPE}) //可以在类上使用

@Retention(RetentionPolicy.RUNTIME) //可以保留在运行时阶段

在添加上一个ImportSelector接口实现类

@Import(CommonImportSelector.class)

优化后

Bean注册条件

给第三方bean对象注入值的方式

方式一

在方法中手动赋值(不推荐使用)

方法二

从文件中读取

使用@Value来获取值

当我们将配置文件中的数据注释了在使用@Value获取,在注入到对象时就会报错,有没有一种方法,当我们配置文件有数据时注入对象,没有数据时就不注入对象。

这时候就要用到bean的注册条件了

SpringBoot提供了设置注册生效条件的注解@Conditional,此数据使用很麻烦,所以它提供了很多的衍生注解。

三个常用注解

@ConditionalOnProperty(prefix = “前缀”,name = “指定键名(方法参数名)”)

@ConditionalOnMissingBean(xxx.class)

@ConditionalOnProperty(name = “指定类的全限定名”)

  • 11
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值