Bean 的注入与获取

112 阅读2分钟

JavaSpring Boot 中的启动类,会扫描所有的基包和子包,获取所有被注解@Bean标注方法的返回值,并将此返回值放入一个Bean容器中。

Bean 的注入

@Bean

在一个方法左边或者上面添加注解 @Bean 即可注册此方法

此方法被扫描到的前提是该方法所在的类被扫描到,因此,此方法所在的类需被以下注解标注:

  • @Configuration: 声明配置类
  • @Controller: 声明控制类
  • @Service: 声明服务类
  • @Repository:声明数据仓库
  • @Component:如果不知道类属于什么模块,就用这个注解将类声明成组件。推荐使用此注解。

或者直接使用 @import 注解 直接在Spring Boot 中注册此方法 使用方法:@import({classA,...})

value|name 属性: 可以给Bean起别名,默认为函数名。 Bean("name")|Bean(value="name")|Bean(name="name")|Bean(name={"name1","name2","name3"})

autowireCandidate属性: 表示Bean是否采用默认的自动匹配机制,默认值为true,如果将其赋值为false,这个Bean就不会被默认的自动匹配机制匹配到,只能通过使用别名的方式匹配到。 使用方法: Bean(name="name",autowireCandidate=false) 使用场景: 当有两个一样名称和类型的Bean时,可以起别名,并将默认匹配方式取消,以去除冲突。

Bean 的获取

在属性前或上面添加注解 @Autowired 或者@Resource

@Autowired

自动获取与属性名相同的Bean,如果不存在属性名相同的Bean 则匹配类型相同的Bean(当匹配类型相同时,Bean容器中只能有一个此类型的Bean) 使用@Autowired 获取注解的方法 1、将属性名改为与Bean名相同 2、添加 @Qualifier 注解 通过 @Qualifier 注解的 value 属性确定 Bean 名称

@Autowired
@Qualifier("BeanName")

@Resource

@Resource 注解与 @Autowired 注解功能相同 并且自带 name 属性

@Resource(name="BeanName")

@Value

//注入常量  会将String 这个常量直接注入到属性x中 
@Value("String")
String x;
// 注解Bean
@Value("#{BeanName}")
// 注入配置文件
@Value("${ConfigName}")

第三章实验

此实验要求用三个函数在终端打印三句话。

把打印语句分别放到三个函数中,并将三个函数都注册一遍。