https://blog.csdn.net/a745233700/article/details/80959716
1、Spring是什么?
它是基于IOC容器和AOP容器的框架
2、Spring 的优点?
应用IOC设计原则,减低计算机代码的耦合性
简单:
快捷:
安全:
容易理解:
3、Spring的AOP理解:
AOP:面向切面编程
原理:将项目中的各个功能分离出来
4、Spring的IoC理解:
字面意思:Inversion of controller 控制反转 : 对对象的控制权,由应用代码转移到外部容器,就是控制权的转移
深层意思:将bean的创建和管理交给容器,让容器来统一维护bean的对象。我们只需要从容器中直接获取bean对象就行,而不用额外编写代码创建bean对象
5、BeanFactory和ApplicationContext有什么区别?
结构上面: ApplicationContext 是BeanFactory的子类
相同点:
不同点:ApplicationContext更加灵活强大
6、请解释Spring Bean的生命周期?
创建: 创建bean
构造:如果是单实例在容器启动时,将bean加载到容器中;如果是多实例,在获取bean的时候加载
初始化前:通过调用beanPostProcesserBeforce 方法,执行初始化前的一些操作
初始化:initBean..来初始化实例对象
初始化后:通过调用beanPostProcesserAfter 方法,执行初始化前的一些操作
销毁:如果方法实现了Destory接口,那么容器关闭前,执行销毁方法
7、 解释Spring支持的几种bean的作用域。
single 单例方式
protopy 多实例方式
request:同一个请求只创建一个对象
session:同一个session只创建一个对象
8、Spring框架中的单例Beans是线程安全的么?
这些bean都是单例的,所以是共享对象,可能存在线程安全问题
9、Spring如何处理线程并发问题?
有一个异步处理器beanpostProcesser
@Anys 注解
????
10-1、Spring基于xml注入bean的几种方式:
注入bean的几种方式:
xml注入
@bean
@ComponentScan和@Autowried
10-2、Spring的自动装配:
@Autowired
针对这个注解,要从以下几个方面分析
作用:@Autowired 可以使对象注入到目标对象中
可以用在哪里: 可以用在构造器,属性,参数,方法中
有哪些属性: 支持request属性,表示自动注入的这个类如果不在容器中,那么也不报错
延伸: @Resource 不支持@Primary 和不支持request方法
@Inject 支持@Primary 和不支持request方法
区别: @Autowired使spring定义的,其他两个是java自定义的
11、Spring 框架中都用到了哪些设计模式?
工厂模式:BeanFactory 通过反射构建实例对象
代理模式:ioc容器将对象构建一个代理对象返回
监听者模式:
单例模式:每一个bean默认都是单实例的
模板方法:
装饰者模式:wrap 用来装饰类
适配器模式:将某些切面方法通过适配器装换成链
12、Spring事务的实现方式和实现原理:
实现事务的注解:通过@Transtation 和@EnableTranstationManager
底层实现:
有一个类可以,如果没有出错,那么执行commit()方法
如果出错了,在catch中调用rollBack()方法
13、Spring框架中有哪些不同类型的事件?
even? 事件派发器?
14、解释一下Spring AOP里面的几个名词:
切面: 要调用的对象bean
切点:pointCut 要通知的方法
15、Spring通知有哪些类型?
前置通知:在方法执行前,调用的方法
后置通知:在方法执行后,调用的方法
返回通知:在方法执行正常返回,调用的方法
异常通知:在方法执行异常返回,调用的方法
环绕通知:
16、Spring的依赖注入(DI)
在运行期间,由外部容器动态的将依赖对象注入到组件中
15、Spring mvc 和struts 区别:
从以下几个维度:
1)机制:springmvc入口是servlet , struts2是filter
2) 性能: spring比struts快。springmvc是基于方法的设计,拦截方法,拦截到方法后根据参数上的注解,把request数据注入进去,并且一个方法对应一个request上下文;struts2是基于类的,每次发一个请求都会实例一个action,每个action都会被注入属性,通过setter,getter把request的数据注入,实际上就是通过getter,setter,方法和request打交道的,一个action对应一个上下文
3)参数传递:struts是在接收参数的时候,可以用属性来接收参数,这说明参数是让多个方法共享的,即struts2所有变量是共享的
4)设计思想: struts更加符合oop编程思想,spring比较谨慎,在servlet上扩展
5)intercepter拦截器的实现机制:struts有自己的拦截机制,springmvc是独立的AOP方式;