今天收到一个工作 4 年的粉丝的面试题。
问题是: “Spring 中有哪些方式可以把 Bean 注入到 IOC 容器”。
他说这道题是所有面试题里面回答最好的,但是看面试官的表情,好像不太对。
我问他怎么回答的,他说: “接口注入”、“Setter 注入”、“构造器注入”。
为什么不对?来看看普通人和高手的回答。
普通人:
嗯。。。。。
高手:
好的,把 Bean 注入到 IOC 容器里面的方式有 7 种方式
使用 xml 的方式来声明 Bean 的定义,Spring 容器在启动的时候会加载并解析这个 xml,把 bean 装载到 IOC 容器中。
使用 @CompontScan 注解来扫描声明了 @Controller、@Service、@Repository、@Component 注解的类。
使用 @Configuration 注解声明配置类,并使用 @Bean 注解实现 Bean 的定义,这种方式其实是 xml 配置方式的一种演变,是 Spring 迈入到无配置化时代的里程碑。
使用 @Import 注解,导入配置类或者普通的 Bean
使用 FactoryBean 工厂 bean,动态构建一个 Bean 实例,Spring Cloud OpenFeign 里面的动态代理实例就是使用 FactoryBean 来实现的。
实现 ImportBeanDefinitionRegistrar 接口,可以动态注入 Bean 实例。这个在 Spring Boot 里面的启动注解有用到。
实现 ImportSelector 接口,动态批量注入配置类或者 Bean 对象,这个在 Spring Boot 里面的自动装配机制里面有用到。
以上就是我对这个问题的理解。
总结
工作了 4 年,IOC 和 DI 都没有搞清楚,作为面试官, 想给你放水都放不了啊。
这道题目也很有意义,要想更加优雅的去解决一些实际业务问题,首先得有足够多的工具积累。
你可曾想过,Bean 的注入竟然有这么多方式,而且还有些方式是没听过的呢?
需要高手面试文档(附赠阿里内部十万字面试文档)或者有不懂的技术面试题想咨询的小伙伴可以后台【管彤】或者评论区留言。
【这里想说,因为自己也走了很多弯路过来的,所以才下定决心整理,收集过程虽不易,但想到能帮助到一部分自学java 的人,心里也是甜的!有需要的伙伴请点㊦方】↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓