Spring中<context:component-scan/>是否会实例化base-package下所有Bean?
针对
<context:component-scan base-package="packageA" />配置的扫描范围答疑 结论:该配置不会实例化packageA及其所有子包下的全部类,仅符合Spring扫描规则的类才会被注册为Bean并完成实例化。
需满足的核心扫描规则如下:
- 目标类上必须标注Spring识别的构造型注解,包括
@Component、@Service、@Repository、@Controller、@RestController、@Configuration,或者标注了被@Component作为元注解修饰的自定义注解。 - 如果配置中额外加了
<context:exclude-filter>规则,即使类带了上述注解,被过滤规则匹配到的也不会被实例化。 - 如果设置了
use-default-filters="false"关闭了默认的注解过滤逻辑,只有被自定义<context:include-filter>规则匹配到的类才会被扫描。 - 类本身要符合Bean实例化的基本要求:不能是抽象类、不能是接口,必须存在可被Spring调用的构造方法(默认要求无参构造,带
@Autowired注解的有参构造也可以)。
内容的提问来源于stack exchange,提问作者Ajay Sabarish
相关产品推荐
相关产品推荐

