注解开发-组件注册及扫描初探

目录

前言

一、注解开发如何注册组件

二、注解开发扫描组件初探


前言

在注解开发中,如何进行组件的注册、组件扫描及注意点。


一、注解开发如何注册组件

        在初学spring时,教程里面通常开篇一个xml文件,然后就嘎嘎造bean,但是有些同学可能不是科班出身,有时候连xml命名空间的概念是啥都不知道,这导致他们就稀里糊涂的写,一般老师或者教程这里也都跳过,不是他们不说,实在是这里展开说实在太费事了。

        另外在实际开发中,无论是传统的springMVC项目还是现在流行的springboot项目,现在几乎已经没有使用xml的方式注册组件的了(说出去让人笑话)。

        现在让我们来看看如何利用注解来注册组件。

        如果我们要用注解来注册一个组件,通常是使用@Configuration、@Controller、@Service、@Repository以及@Component五大注解,值得注意的是@Configuration注解,它是特殊的,看代码:

@Configuration
/*@ComponentScan(value = "com.motionlesstar",excludeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Repository.class),
        @ComponentScan.Filter()
})*/
public class Config {
    @Bean(value = "person")
    public Person getPerson() {
        return new Person("zhangsan", 23);
    }
}
@Controller
public class PersonController {
}

-------------------------------
@Service
public class PersonService {
}

-------------------------------
@Repository
public class PersonDao {
}

        我这里分别用上述四个注解注册了4个组件,但是当我们获取spring容器中的组件时却发现

 除了spring框架自己的组件外,我们所注册的只有config及config内部的bean被注册进来了。有同学就要说了,不是要有@ComponentScan注解扫描才能被注册进spring容器的吗?而这也是我正要说的,@Configuration注解不是@ComponentScan注解扫描进容器的,参考chatGPT的说法:

@Configuration注解的类会被Spring自动注册,是因为在Java配置中,使用@Configuration注解的类表示一个配置类,它可以包含@Bean注解的方法,用于定义和初始化Bean 。Spring框架在收集Bean的时候,会扫描所有使用了@Configuration注解的类,对其中所有由@Bean注解的方法进行处理,并将这些Bean注册到Spring的IoC容器中。因此,使用@Configuration注解的类可以为Spring提供Bean的定义,使Spring能够自动创建Bean实例,并在需要时自动注入它们。

 所以,当我们给一个类写上@Configuration注解后,不需要其他动作,该类就会被注册进spring容器。


二、注解开发扫描组件初探

        与@Configuration注解不同,@Controller、@Service、@Repository以及@Component这四个注解是需要由@ComponentScan注解扫描进spring容器的。

@Configuration
@ComponentScan(value = "com.motionlesstar",excludeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Repository.class),
        @ComponentScan.Filter()
})
public class Config {
    @Bean(value = "person")
    public Person getPerson() {
        return new Person("zhangsan", 23);
    }
}

运行后:

  

         可以看到,在@Configuration注解中,我们可以指定包扫描路径,在控制台也看到了组件除了Dao层都已经被注册进spring容器了,那为什么唯独不见Dao层组件呢,这是因为@Configuration注解给我们提供了一个功能,可以定制化扫描组件,这使得我们在实际开发中可以灵活的扫描组件,我们下章再聊。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值