1.谈谈你对spring的理解
Spring是一个开源框架,为简化企业级应用开发而生,spring可以使简单的javabean实现以前只有EJB才能实现的功能,
Spring主要核心是
IOC控制反转 把对象的创建交由spring容器创建,无需自己创建,只需要直接调用spring提供的对象即可;
DI依赖注入 使用对象的set方法或带参数的构造方法在创建对象时将其属性自动设置所需要的值的过程
AOP 面向切面编程 将一个个对象的某些类似的方面横向抽成一个切面,对这个切面进行一些如权限控制、事务管理、记录日志等公用操作处理的过程就是面向切面编程的思想, 底层是动态代理,如何实现了接口采用jdk动态代理,没有实现使用CGLIB动态代理.
2.Spring的设计模式
① 单例模式----spring中两种代理模式,若对象实现了若干接口spring使用jdk的java.lang.reflect.Proxy类代理,没有实现接口,使用CGLIB库生成目标类的子类;
② 模版方式模式–用来解决代码重复的问题
③ 前端控制模式–spring提供了前端控制器DispatherServlet来对请求进行分发
④ 试图帮助(view helper) --spring提供了一系列的jsp标签.高效宏来帮助将分散的代码整合在试图中
⑤ 依赖注入–贯穿于BeanFactory/ApplicationContext接口的核心理念
⑥ 工厂模式–创建对象时不会对客户端暴露创建逻辑,并且是通过使用同一个接口来指向新创建的对象,spring中使用beanFactory来创建对象的实例.
3.Spring常用注解
@component:标注一个普通的spring bean类
@Repository:标注一个Dao组件类
@Service 标注一个业务逻辑组件类
@Controller:标注一个控制器组件类
@Autowired:用于为类的属性、构造器、方法进行注值
@Transactional:配置事务
@value:从properties里取配置
4.Spring bean的生命周期
① 实例化bean对象
② Set方法注入属性
③ 调用自定义的init-method方法
④ 执行业务处理
⑤ 调用自定义的destroy-method方法
5.Spring的作用
Spring能帮我们根据配置文件创建及组装对象之间的依赖关系
Spring面向切面编程能帮我们无耦合的实现日志记录,性能统计,安全控制
Spring能非常简单的帮我们管理数据库事务
Spring能与第三方的web框架实现无缝整合,自己也提供了一套springMVC框架来方便web层的搭建
Spring能方便的与javaEE整合与更多技术整合.
6.Spring的声明式事务
在配置文件中使用声明式的处理事务来代替代码式的处理事务,这样事务管理不侵入开发的组件,具体的来,业务逻辑对象就不会意识到正在事务管理中,事实上也应该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的部分,如果想要改变事务管理策划的话.也只需要在定义文件中重新配置即可,方便维护.
7.BeanFactory常见的实现类
bean工厂是工厂模式的一个实现,提供了控制反转功能,用来把应用的配置和依赖从真正的应用代码中分离, 常见的实现类有 DefaultListableBeanFactory,XmlBeanFactory,ApplicationContext等,最常用的是XmlBeanFactory.
8.什么是Spring IOC容器?
IOC控制反转:Spring IOC负责创建对象,管理对象,通过依赖注入,装配对象,配置对象,并管理这些对象的整个生命周期。
9.IOC的优点? 把应用的代码量降到最低,使应用容易测试,单元测试不再需要单例和JNDI查找机制,最小的代价和最小的侵入性使松散耦合得以实现。
10.IOC注入的方式?
Set方法注入,构造器注入,静态工厂的方法注入,实例.工厂的方法注入。
11.什么是spring Bean?
形成spring应用主干的java对象,他们被spring ioc容器初始化,装配和管理。这些beans通过容器配置的元数据创建。
12.Spring支持的几种bean作用域?
singleton:bean在每个spring IOC容器中只有一个实例。
Prototype:一个bean的定义可以有多个实例。
Request:每次请求http请求都会创建一个bean,该作用域仅在基于web的spring ApplicationContext情形下有效。
Session:在一个http session中,一个bean定义对应一个实例,该作用域仅在基于web的spring ApplicationContext情形下有效。
13.Spring中的单例bean是线程安全的吗?
不是线程安全的
14.什么是bean的自动装配?
无需在spring的配置文件中描述javabean之间的依赖关系,IOC容器会自动建立javaBean之间的关联关系。
15.不同方式的自动装配?
No:默认的方式不进行自动装配,通过显示设置ref属性来进行装配。
ByName:通过参数名自动装配
ByType:通过参数类型自动装配。
Constructor:类似于byType,但是要提供构造器参数。
16.开启注解装配: <Context:annotation-config/>配置。
17.解释一下spring的AOP?
AOP面向切面编程,通过使用横切技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,将其命名为切面,切面与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度。并且有利于未来的可操作性和可维护性。
18.通知类型
前置通知,后置通知,环绕通知,异常处理通知,最终通知。