Spring面试题
-
什么是Spring
- Spring是一个轻量级的容器,他实现了IOC和非侵入的框架,并提供了AOP的实现方式,提供了持久层事务的支持,其让java开发模块化,并且贯穿持久层,逻辑层,表现层,让每一个模块都可以独立分开,降低耦合,提高代码复用率.
-
Spring的好处
-
Spring提供了IOC和DI,将管理和维护对象的工作交给了Spring
-
Spring比较轻量级
-
Spring并不排斥其他框架,所以其他框架和Spring整合变得很容易
-
Spring提供了SpringMVC
-
Spring提供了便捷的事务控制
-
-
SpringIOC和DI
-
IOC是将维护对象和创建对象的工作交给Spring,而不用我们自己去创建和维护
-
DI是注入对象中所需要的属性
-
-
DI的三种方式
-
构造方法
-
set方法
-
接口
-
-
BeanFactory 和ApplicationContext的区别
-
首先BeanFactory和ApplicationContext都是接口,并且ApplicationContext是BeanFactory的子接口。
-
其次BeanFactory是Spring中最底层的接口,提供了最简单的容器的功能,只提供了实例化对象和拿对象的功能
-
ApplicationContext(应用上下文)它是Spring的一个更高级的容器,提供了更多的有用的功能,ApplicationContext继承了BeanFactory接口,所以,ApplicationContext也能像BeanFactory从容器中得到Bean(继承至 ListableBeanFactory).
-
加载方式不同,BeanFactory采用的是延迟加载的形式来注入Bean,即只有在使用某个bean的时候,才对该Bean进行加载实例化.
-
ApplicationContext则相反的,它是在Ioc容易启动时就一次性创建所有的Bean,
-
-
常见的ApplicationContext的实现方式
-
ClassPathXmlApplicationContext
-
FileSystemXmlApplicationContext
-
XmlWebApplicationContext
-
-
SpringBean的作用域
-
Singleton 单例
-
Prototype 多例
-
Request request生命周期内
-
Session session生命周期内
-
global-session
-
-
注解的方式配置Bean
-
在spring配置文件中设置
<context:annotation-config/>
-
@Autowired 按照类型进行匹配
-
@Qualifier("student") 按照id进行匹配
-
@Resource(name="student") // 有参数 用参数和id做匹配,如果没有则先用变量名和id,再用类型匹配
-
-
默认一个bean是在Spring容器初始化加载,如果设置lazy-init或者为其他作用域,则会在使用到bean的时候初始化(init ,destory)
-
什么是Spring inner beans
- 即Spring内部Bean,在一个Bean的内部定义另一个Bean
-
Spring事件(5种)
-
上下文更新事件(ContextRefreshedEvent):该事件会在ApplicationContext被初始化或者更新时发布,也可以在调用ConfigurableApplicationContext接口中的refresh()方法时被触发。
-
上下文开始事件(ContextStartedEvent): 当容器调用ConfigurableApplicationContext的Start()方法开始/重新开始容器时被触发。
-
上下文停止事件(ContextStoppedEvent): 当容器调用ConfigurableApplicationContext的Stop()方法停止容器时触发该事件。
-
上下文关闭事件(ContextClosedEvent): 当ApplicationContext被关闭时触发该事件。容器被关闭时,其管理的所有单例Bean都被销毁。
-
请求处理事件(RequestHandledEvent): 在Web应用中,当一个http请求(request)结束触发该事件。
-
允许用户自定义事件,继承ApplicationEvent,并且还要创建一个监听器
-
-
用到了那些设计模式
-
代理模式—在AOP和remoting中被用的比较多。
-
单例模式—在spring配置文件中定义的bean默认为单例模式
-
模板方法—用来解决代码重复的问题。
-
前端控制器—Spring提供了DispatcherServlet来对请求进行分发。
-
工厂模式—BeanFactory用来创建对象的实例。
-
依赖注入—贯穿于BeanFactory / ApplicationContext接口的核心理念。
-
视图帮助(View Helper )
-
-
aop
-
将通用的代码从业务中分离出来,简化代码.使用的为jdk代理和cglib代理
-
连接点 : 在方法的执行前后和抛出异常可以作为连接点,即将增强和目标方法连接的地方.
-
切入点 : 在某个方法被调用的时候,这个方法上的连接点变为切入点
-
增强 : 目标方法除了核心业务以外的所需要的方法, 比如在save()方法中,save()为核心方法,开启事务为非核心方法,可以抽离出来, 在AOP中开启事务就叫做增强
-
切面 : 除了目标方法所在的类以外其他的类
-
代理 : 将目标方法和增强结合在一起
-
织入 : 生成代理类的过程
-
-
事务
-
Spring内置了事务管理器,配置一下就好
-
有配置式和声明式两种方法
-