Spring 04: 注解开发

1. 自动注册Bean @Component

@Component 是类注解,用于自动检测和装配组件到 Spring 容器中。当 Spring 应用程序启动时,它通过类路径扫描,自动识别带有 @Component 注解的类,并将这些类实例化为 Spring 容器中的 beans。

使用该注解注册的Bean的名称,默认是类名的首字母小写形式。当然,也可以以注解实参的方式手动指定名称。

请注意,若要让Spring自动检测扫描组件,需要在XML中启用<context:component-scan>标签,不同的包既可以选择以公共父包的形式,全部扫描;也可以逐一列举,以逗号分隔。

<context:component-scan base-package="path/to/your/package1,path/to/your/package2">

或者在下面的容器配置注解介绍中,使用@ComponentScan注解等效代替。

更清晰的子注解 @Service、@Controller、@Repositry

@Component的子注解,作用效果与前者相同,只是拥有更清晰的说明性。

  • @Service:标记服务层的组件,表明该类主要用于执行业务逻辑。
  • @Controller:标记控制层组件,主要用于处理 HTTP 请求。
  • @Repository:标记数据访问组件,主要用于封装数据库操作。

1.1 Bean作用域控制 @Scope

对于@Component标记的Bean,可以附加@Scope注解说明作用域。例如:

@Component
@Scope("singleton")
class Service {
   ...}

1.2 Bean生命周期回调 @PostConsruct、@PreDestroy

Java 9已移出Java标准库,需额外导入jakarta,详见注解弃用说明。

用于标记Bean的初始化回调与销毁回调函数。请注意,这个使用方法与XML配置一样,@PreDestroy标记的注册方法仍然需要关闭容器或对容器注册销毁钩子。

2. 容器配置

2.1 定义配置类 @Configuration

为了进一步简化Spring配置,我们可以使用Configuration注解标记的配置类完全替代applicationContext.xml配置文件。首先来看下面这一例子:

@Configuration
@ComponentScan({
   "com.example.dao", "com.example.service"})
@PropertySource({
   "config.properties", "config.properties"})
class AppConfig {
   ...}

配置Bean扫描 @ComponentScan

等效替代XML配置中的<context:component-scan>

读取外部配置文件 @PropertySource

请注意,使用注解方式加载的外部配置文件,无法在字符串中使用通配符*。只能一个一个手动加载。或者采用@Bean手动创建导入一个配置解析Bean``,以此实现对配置文件的子集,但是方法这里不做展开。对于配置项,可以在@Value注解中通过${propname}来使用。@Value用于数据注入,其具体用途将在下面的章节中具体介绍。

但是这里要说明一个问题,当你使用@Value("${propname}")注解来引用配置内容时,如果没有该配置项,那么该占位符就会单纯的被视作字符串"${propname}",而不会报错。这显然在一些情况下与我们的预期不符,解决方法:

@Configuration
public class AppConfig {
   

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
   
        return new PropertySourcesPlaceholderConfigurer();
    }
}

如果你想对不存在的值保持严格的控制,你应该声明一个 PropertySourcesPlaceholderConfigurer Bean,使用上述配置可以确保在任何 ${} 占位符无法解析的情况下Spring初始化失败。请注意:当使用 JavaConfig 配置 PropertySourcesPlaceholderConfigurer 时,@Bean 方法必须是 static 的。

2.2 向容器手动注册Bean @Bean

@Bean是一个方法级注解,其作用相当于Spring XML配置中的<bean>标签。@Bean标记的方法将返回的对象自动注册为Spring Bean。这个调用过程正常情况下是注解处理器完成的,一般情况下我们不需要手动调用。

默认情况下,Bean的名字和方法的名字是一样的。我们也可以通过注解形参进行修改。

一个 @Bean 注解的方法可以有任意数量的参数,描述构建该Bean所需的依赖关系。对于其所需要的其他依赖,我们可以通过以下形式提供:

  • 引用类型:如果引用类型是其他Bean的话,可以为该方法添加对应类型的形参,Spring容器在调用该方法时,会根据类型自动为该形参注入值。<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值