参考:
springboot starter注入bean的使用情况
前提
有一个starter,他有一个service,可以通过@Service注册成bean,或者通过config注入成bean,有一个controller通过@Controller注入成bean,并且通过@Autowired调用了该service。
当他使用mvn install打成jar包后被主项目引用,可能存在以下几种情况:
starter配置config | starter配置@Service | 使用方配置scan包含starter路径 | 使用方调用@Autowired | 使用方调用starter的controller | 备注 |
---|---|---|---|---|---|
× | √ | √ | √ | √ | 如果使用的bean名存才冲突会报错,好处是可以直接集成页面等 |
× | √ | × | × | × | 无法启动,因为未注入该bean |
√ | √ | 可以打包,但是无法启动,starter也不能直接启动,因为有2个bean注入,一个是@Service,一个是config配置的 | |||
√ | × | × | √ | × | 常规使用方法,此时由于没有scan到starter package下的controller的bean,所以实际该页面没被注入,导致无法访问到,但是config |
× | × | √/× | × | × | 不配置config,也不配置@Service,不能注入bean |
注意:情况4是常见的,此时只有需要被注册成bean的才会被注册成bean,而其他的均不会,管理较为干净。而情况1是在集成新页面时会使用的,例如开发一个管理页面,只需要集成该starter,并且scan对应的pacakge即可。