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-name 、url 、username 、password 这些单词太常见了。
- 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 先创建。