1.IOC
1.1 IOC概述
IOC(Inversion of Controller:控制反转)的思想是将原本在程序中手动创建对象的控制权,交给 Spring 框架管理。
为什么叫控制反转?
- 控制:对象创建(实例化、管理)的权利;
- 反转:控制权交给外部环境(Spring框架、IOC容器);
在 Spring 中, IoC 容器是 Spring 用来实现 IoC 的载体, IoC 容器实际上就是个 Map(key,value),Map 中存放的是各种对象。
1.2 Spring Bean是什么
Bean 代指的就是那些被 IoC 容器所管理的对象。我们需要告诉 IoC 容器帮助我们管理哪些对象,这个是通过配置元数据来定义的。配置元数据可以是 XML 文件、注解或者 Java 配置类。
1.3 将类声明为Bean的注解
@Component
:通用的注解,可标注任意类为Spring
组件。如果一个 Bean 不知道属于哪个层,可以使用@Component
注解标注。@Repository
: 对应持久层即 Dao 层,主要用于数据库相关操作。@Service
: 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。@Controller
: 对应 Spring MVC 控制层,主要用于接受用户请求并调用Service
层返回数据给前端页面。
1.4 @Component注解和@Bean注解的区别
两个注解都可以将类的实例注入到Spring容器生成Bean交给Spring容器管理。
@Component
注解作用于类,而@Bean
注解作用于方法。@Component
通常是通过类路径扫描来自动侦测以及自动装配到 Spring 容器中(我们可以使用@ComponentScan
注解定义要扫描的路径从中找出标识了需要装配的类自动装配到 Spring 的 bean 容器中)。@Bean
注解通常是我们在标有该注解的方法中定义产生这个 bean,@Bean
告诉了 Spring 这是某个类的实例,当我需要用它的时候再给我。@Bean
注解比@Component
注解的自定义性更强,而且很多地方我们只能通过@Bean
注解来注册 bean。比如当我们引用第三方库中的类需要装配到Spring
容器时,则只能通过@Bean
来实现。
1.5 @Autowired注解和@Resource注解的区别
- @Autowired注解是Spring提供的注解,@Resource是JDK提供的注解;
- @Autowired默认通过类型注入Bean,@Resource默认根据Bean名称注入Bean;
- 当接口存在多个实现类时,@Autowired和@Resource都需要通过Bean名称来注入Bean。@Autowaired可配合@Qualifier注解显示指定Bean名称,@Resource通过name属性显示指定Bean名称;
- @Autowired支持构造函数、方法、字段和参数上使用,@Resource主要用于字段和方法上的注入,不支持在构造函数和参数上使用;
1.6 Bean的作用域
1.7 Bean的线程安全码
1.8 Bean的声明周期
参考链接
Spring常见面试题总结 | JavaGuide(Java面试 + 学习指南)