Spring 中配置 Java Bean 简化

Java代码配置 Java Bean 简化

第一节:java代码配置版本
如果我们的项目中有几十个 Java Bean 要配置,那么就需要我们去编写几十个 @Bean 方法。很显然,这是很麻烦的事情。

为此,Spring 提供了几个注解来简化我们的配置。

@Component 注解

@Component 注解要配置包扫描功能使用

@Component 注解用于标注于 Bean 的类上。凡是被标注了该注解的类(只要在扫描路径下)都会被 Spring 创建。

@Component 注解有唯一的属性 “value” 属性。它用来为 Bean 命名。

@Component 注解有三个语义化的子注解:

语义化子注解用处
@Repository用于持久层
@Service用于业务层
@Controller用于 Web 层

@ComponentScan 注解

@ComponentScan 注解是搭配 @Component 注解使用的注解

通过 @ComponentScan 注解的 “basePackages” 属性指定一个包路径,在这个路径之下的标注了 @Component(及其语义化子注解)都会被 Spring IoC 容器创建一个单例对象,并"扔进" IoC 容器中。

例如:

@ComponentScan(basePackages = "com.example")
public class ApplicationConfig {
}

@Configuration 注解

@Configuration 专用于标注于我们的配置类(XxxConfig)上。

@Configuration
public class YyyConfig {
    ...
}

它有 2 个作用:

  • 逻辑上,它可以用来标识『这个类是个配置类』。

  • 它会导致 Spring IoC 容器将这个配置类的对象,纳入到 Spring IoC 容器的管理范畴内。

    简单来说,这样一来 Spring IoC 容器中会『多』出来一个单例对象:YyyConfig 对象。

@Value 注解和 @PropertySource 注解

@Value 注解用于标注于『简单类型』属性上。凡是被标注了该注解的属性都会被 Spring 注入值(赋值)

@Value 注解有唯一的属性 value 属性。它用来为简单属性指定值。


@PropertySource 可以配合 @Value 来简化对简单类型的属性的赋值。

@PropertySource 除了可以直接用在 @Component 上,也可以用在配置类上。

  • jdbc.properties
xxx.yyy.zzz.driver-class-name=com.mysql.cj.jdbc.Driver
xxx.yyy.zzz.url=jdbc:mysql://127.0.0.1:3306/scott\
    ?useUnicode=true\
    &characterEncoding=utf-8\
    &useSSL=false\
    &serverTimezone=Asia/Shanghai
xxx.yyy.zzz.username=root
xxx.yyy.zzz.password=123456

注意,这里有个和本知识点无关的小细节:需要有前缀,否则会因为命名冲突导致问题。因为, driver-class-nameurlusernamepassword 这些单词太常见了。

  • Java Bean
@PropertySource("classpath:jdbc.properties")   // 看这里,看这里,看这里
public class ZzzConfig{

    @Value("${xxx.yyy.zzz.driver-class-name}")
    private String driver;

    @Value("${xxx.yyy.zzz.url}")
    private String url;

    @Value("${xxx.yyy.zzz.username}")
    private String username;

    @Value("${xxx.yyy.zzz.password}")
    private String password;

    ...
}

@Autowired 注解

@Autowired 注解用于标注于『引用类型』属性上。凡是被标注了该注解的属性都会被 Spring 以『类型』为依据注入另一个 Bean 的引用。

@Autowired 注解有唯一的属性 required 属性(默认值为 true。它用来指示该对该属性的注入是否为必须(默认为 必须,即,在 Spring IoC 容器中没有发现符合类型的其它 Bean 时,会抛出异常。

@Qualifier 注解

@Qualifier 注解需要结合 @Autowired 注解使用。它用于标注于引用类型属性上。凡是被标注了该注解的属性都会被 Spring 以『名字』为依据注入另一个 Bean 的引用。

@Qualifier 注解有唯一的属性 value 属性。它用于指示需要注入的另一个 Bean 的名字。

一个小细节:包扫描的 Bean 会早于配置的 bean 先创建。

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值