超详细总结Spring的配置注解

前言

配置注解,指@Configuration,@ComponentScan,@Scope,@Lazy,@Conditional,@Import等注解,本篇文章将对这些注解的使用进行详细总结。

Springboot版本:2.4.1

Spring版本:5.3.2

正文

一. @Configuration

@Configuration注解修饰的类就是配置类,配合@Bean注解使用,可以用于向容器注册bean。如下是示例(所有类全部放在同一包目录下)。

业务类如下所示。

public class MyService {}
复制代码

由@Configuration注解修饰的业务类如下所示。

@Configuration
public class MyConfig {

    @Bean
    public MyService myService() {
        return new MyService();
    }

}
复制代码

测试类如下所示。

public class MyTest {

    public static void main(String[] args) {
        ApplicationContext applicationContext
                = new AnnotationConfigApplicationContext(MyConfig.class);
    }

}
复制代码

运行测试程序,可以将MyServicebean注册到容器中,并且bean名称为myService,日志打印如下所示。

二. @ComponentScan

@ComponentScan注解用于扫描并注册bean到容器中。如下是示例(所有类全部放在同一包目录下)。

业务类如下所示。

@Component
public class MyDao {}

@Component
public class MyService {}
复制代码

配置类如下所示。

@Configuration
@ComponentScan(value = "com.learn.spring.annotation.componentscan", 
        useDefaultFilters = true)
public class MyConfig {}
复制代码

测试类如下所示。

public class MyTest {

    public static void main(String[] args) {
        ApplicationContext applicationContext
                = new AnnotationConfigApplicationContext(MyConfig.class);
    }

}
复制代码

运行测试程序后,会把com.learn.spring.annotation.componentscan包目录下的MyServiceMyDaobean注册到容器中。上面的配置类的@ComponentScan注解的value指示扫描哪个包目录及其子目录下的类,同时useDefaultFilters字段为true(不显示指定也为true)表示使用默认过滤规则,默认过滤规则就是将指定路径下所有由@Controller,@Service,@Repository和@Component注解修饰的类的bean注册到容器中

现在将useDefaultFilters配置为true,并编写一个自定义过滤器MyTypeFilter,如下所示。

public class MyTypeFilter implements TypeFilter {

    /**
     * @param metadataReader 可以获取当前正在操作的类的信息
     * @param metadataReaderFactory 可以获取上下文中所有类的信息
     */
    @Override
    public boolean match(MetadataReader metadataReader,
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值