目录
2.ApplicationContext和BeanFactory有什么区别?
3.SpringBoot启动类用到了什么注解?都有什么作用?
1.说一说Spring Ioc的工作流程
这个问题我将从三个方面来回答:
(1)Ioc是什么?
Ioc也就是控制反转,核心思想就是把对象的管理权限交给了容器,应用程序如果要使用某个对象的实例,那么直接从Ioc容器中获取就可以了。这种设计的好处在于降低了对象和对象之间的藕合性,使得程序变得更加灵活。
(2)Bean的声明方式有哪些?
一般来说,一共有三种:
第一,基于XML的方式配置。可以在XML配置文件里面通过<Bean>的标签进行声明
第二,基于注解扫描的方式配置。可以通过@Service、@Controller、@Repository等注解进行声明
第三,基于Java类的配置。可以在Configuration配置类里面,通过@Bean注解去声明
(3)Ioc的工作流程
工作流程大致可以分为两个阶段:
第一,是Ioc容器的初始化阶段。该阶段主要是根据程序里面定义的XML文件或者注解等Bean的声明方式,去解析和加载后生成BeanDefinition,然后把BeanDefinition注册到容器里面。
第二,是Bean的实例化阶段。当某个请求通过容器的getBean()方法明确的请求某个对象,就会触发这个阶段。
2.ApplicationContext和BeanFactory有什么区别?
ApplicationContext和BeanFactory都是Spring框架中提供的IOC容器,用来管理对象的创建、配置、依赖注入、生命周期等。它们的主要作用是提高应用程序的可维护性、可扩展性、降低耦合度。
-
加载方式:BeanFactory采用延迟加载方式,即只在需要使用Bean时才进行实例化,而ApplicationContext在启动时就进行实例化。
-
功能:ApplicationContext在BeanFactory的基础上添加了更多的企业级功能,例如AOP、国际化支持、事件传递等。
-
性能:ApplicationContext相比于BeanFactory性能更好,这是因为它在初始化时会实例化所有的Bean,并缓存起来,降低了Bean的查找和实例化次数。
-
作用域:ApplicationContext提供了多种作用域,例如singleton、prototype、request、session等作用域,而BeanFactory只提供singleton和prototype两种作用域。
-
使用方式:使用BeanFactory容器首先需要定义XML配置文件,指定Bean的ID、Class以及Bean的属性,然后调用BeanFactory.getBean()方法来获取实例。使用ApplicationContext容器一般和BeanFactory一样也要定义XML配置文件,但是通过调用ClassPathXmlApplicationContext或FileSystemXmlApplicationContext等类的构造函数,实例化一个ApplicationContext对象,就可以获取被实例化的Bean了。
国际化支持:Spring应用程序可以支持多种语言和文化习惯,ApplicationContext提供了统一的国际化机制来处理显示给用户的文本信息。通过国际化机制,可以将应用程序的文本信息转化为多国语言版本,并根据不同的本地化选项进行切换。例如,可以根据用户的浏览器语言设置,自动切换到相应的语言版本,从而提供更好的用户体验。
事件传递:Spring应用程序是事件驱动的,通过ApplicationContext,应用程序中的组件可以相互通信、协作。ApplicationContext提供了一种基于事件的机制,允许组件之间发送和接收事件,从而实现解耦合、松散耦合的应用程序。例如,当一个组件完成某个任务之后,可以向其他组件发送一个事件通知,其他组件可以通过注册监听器来接收相应的事件,并进行相应的处理操作。
3.SpringBoot启动类用到了什么注解?都有什么作用?
-
@SpringBootApplication:这是Spring Boot应用程序启动类的核心注解,它包括了@ComponentScan、@EnableAutoConfiguration和@SpringBootConfiguration这三个注解的功能。@ComponentScan扫描应用程序中的其他组件,@EnableAutoConfiguration自动配置Spring上下文环境,@SpringBootConfiguration表示这是Spring Boot的配置类。
-
@Import:这个注解允许将其他配置类或者Bean导入到当前配置类中,方便管理和维护。
-
@MapperScan:是MyBatis框架中的注解之一,它的作用是扫描指定包下的所有MyBatis Mapper接口,并自动将它们注册为Spring容器中的Bean。
-
@EnableTransactionManagement:这个注解的作用是开启Spring对事务的管理,这样就可以使用@Transactional注解声明事务,简化编码和配置工作。