Spring家族:
简单介绍:
2003年提出的java轻量级框架,主要作用:处理业务之外的一些通用技术,如文件上传,事务管理,日志管理,安全管理,性能管理。
优点:
1. AOP的切面编程,无倾入性处理公共业务比较方便
2 spring为开发者解决大量的技术难点问题,使得开发者有更多的精力去关注业务的处理。
3 spring在解耦合方面做得非常优秀,提高代码的维护性。
4 开源,免费,成熟,拓展性灵活度高,对其他框架的兼容性完美结合
总结一句话:节省开发成本又能保证质量。
缺点:
1.测试的时候不太方便,可能只需要测试一个功能,也需要启动整个ioc容器。
2.springMVC的路由方面不太好管理,因为每个路由都分散到了各个controller中,没有一个统一的全局管理。
3.配置文件过多,搭建起来有一定难度.需要有一定基础才能够构建出来,报错也不是一般小白能够解决的。
4.过于庞大,无法做到小而精,由于太智能,带来的问题就是结构太复杂,性能上面会有一定的损耗,毕竟大量的反射和代理也有很大因素。
Spring的八大组成部分:
AOP,ORM,Web,MVC,DAO,Core,Context,securit(权限管理)
Spring core:核心容器(IOC容器)提供Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。
BeanFactory 使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
Spring content:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。
Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
Spring AOP:面向切面的编程功能集成到了 Spring 框架中。不用依赖 EJB 组件,可以提供事务管理服务。
Spring DAO:JDBCDAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库抛出的错误消息。
Spring ORM:提供了 ORM的对象关系工具,其中包括JDO、Hibernate 和 iBatis SQL Map。
Spring Web 模块:为基于Web 的应用程序提供了上下文。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
IoC(控制反转):Spring容器创建对象,管理对象,通过注解或者用xml配置告诉spring要需要哪些对象,Spring就会帮你创建好。
DI(依赖注入):Spring创建好对象后,通过依赖注入给使用者,解决依赖性问题。
说白了Ioc容器就是专门帮忙管理对象的对象池,包括对象的周期,释放,组装。这样子即使出现需求变化,更改对象实现类,我们也可以直接设置新的实现类。
1. 什么是依赖注入(DI),依赖注入的作用是什么?
IOC是一种思想,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,
从而导致类与类之间高耦合,难于测试;有了IOC容器后,把创建和查找依赖对象的控制权交给了容器,
由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,
利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。
依赖注入的作用:减少类间耦合度,避免用new来创建对象。
2. aop介绍?
面向切面的编程。事务管理、权限控制、日志记录、性能统计等进行单独处理。就是把可重用的功能提取出来,然后将这些通用功能在合适的时候织入到应用程序中,比如说在用Hibernate的时候,如果不用spring每次都要写事务的提交代码,有了spring可以通过AOP帮助我们管理事务,要记录日志的时候添加一条记录后需要在数据里同时添加一条添加成功了或失败的记录,那么就可以用Spring的Aop来处理,虽然不用Aop也能做但是不用Spring的Aop就会写很多重复的代码。
3.介绍一下Spring的事务管理
事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,
如果中间有一条出现异常,那么回滚之前的所有操作。这样可以防止出现脏数据,防止数据库数据出现问题。
开发中为了避免这种情况一般都会进行事务管理。Spring中也有自己的事务管理机制,
一般是使用TransactionMananger进行管理,可以通过Spring的注入来完成此功能。
4. 解释Spring框架中bean的生命周期。
Spring容器从XML 文件中读取bean的定义,并实例化bean。
Spring根据bean的定义填充所有的属性。
如果bean实现了BeanNameAware接口,Spring传递bean的ID到setBeanName方法。
如果Bean 实现了BeanFactoryAware接口,Spring传递beanfactory 给setBeanFactory方法。
如果有任何与bean相关联的BeanPostProcessors,Spring会在postProcesserBeforeInitialization()方法内调用它们。
如果bean实现IntializingBean了,调用它的afterPropertySet方法,如果bean声明了初始化方法,调用此初始化方法。
如果有BeanPostProcessors和bean关联,这些bean的postProcessAfterInitialization()方法将被调用。
如果bean实现了DisposableBean,它将调用destroy()方法。
5、Spring 框架中都用到了哪些设计模式?下面列举了比较有代表性的:
代理模式—在AOP和remoting中被用的比较多。
单例模式—在spring配置文件中定义的bean默认为单例模式。
模板方法—用来解决代码重复的问题。比如.RestTemplate, JmsTemplate, JpaTemplate。
前端控制器—Spring提供了DispatcherServlet来对请求进行分发。
视图帮助(View Helper )—Spring提供了一系列的JSP标签,高效宏来辅助将分散的代码整合在视图里。
依赖注入—贯穿于BeanFactory /ApplicationContext接口的核心理念。
适配器--spring aop
装饰器--spring data hashmapper
观察者-- spring 时间驱动模型
工厂模式—BeanFactory用来创建对象的实例。
6、Spring Bean的作用域之间有什么区别?
Spring容器中的bean可以分为5个范围。
singleton:这种bean范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个bean的实例,单例的模式由bean factory自身来维护。
prototype:原形范围与单例范围相反,为每一个bean请求提供一个实例。
request:在请求bean范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。
Session:与请求范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效。global-session:global-session和Portlet应用相关。当你的应用部署在Portlet容器中工作时,它包含很多portlet。
如果你想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中。
spring mvc 注解
1 @Controller 标注为spring容器的中的bean
2 作用域注解有五大作用域:原型单例request session 全局session
3 @RequestMapping 访问路径,可以用在类或者方法上访问路径类/方法
4 @responsebody 返回字符串,一般用于返回json格式
5 @ModelAttribute 放入request作用域
6 @SessionAttributes 值能用在类上
7 @requestParam 主要用于数据封装时,页面的参数名与方法参数不一致时
8 @pathVarible 主要用于获取路径变量的值
9 @Scope("singleton") //只实例化一个bean对象
Spring MVC中进行重定向,有两种方式:
- 方法返回的URI(相对路径)中加上"redirect:"前缀,声明要重定向到该地址
- 使用HttpServletResponse对象进行重定向。
重定向和转发的区别
请求重定向以redirect:开头,不仅可以重定向到当前应用程序的其他资源,还可以重定向到同一个站点上的其他应用程序的资源,有HttpServletResponse.sendRedirect方法;
请求转发以forward:开头,只能是同一个Web应用中的组件,有RequestDispatcher.forward方法。
7.请你谈谈SSH整合
SSH:Struts(表示层)+Hibernate(持久层)+Spring(业务层)
a、Struts
Struts是一个表示层框架,主要作用是界面展示,接收请求,分发请求。
b、Hibernate
Hibernate是一个持久层框架,它只负责与关系数据库的操作。
c、Spring
Spring是一个业务层框架,是一个整合的框架,能够很好地黏合表示层与持久层。