框架--Spring
一、Spring概述
1、什么是Spring
Spring是一个开源的Java EE开发框架。Spring框架的核心功能可以应用在任何Java应用程序中,但对Java EE平台上的Web应用程序有更好的扩展性。Spring框架的目标是使得Java EE应用程序的开发更加简捷,通过使用POJO为基础的编程模型促进良好的编程风格。
2、Spring的特征
轻量级:Spring在大小和透明性方面绝对属于轻量级的,基础版本的Spring框架大约只有2MB。
控制反转(IOC):Spring使用控制反转技术实现了松耦合。依赖被注入到对象,而不是创建或寻找依赖对象。
面向切面编程(AOP): Spring支持面向切面编程,同时把应用的业务逻辑与系统的服务分离开来。
容器:Spring包含并管理应用程序对象的配置及生命周期。
MVC框架:Spring的web框架是一个设计优良的web MVC框架,很好的取代了一些web框架。
事务管理:Spring对下至本地业务上至全局业务(JAT)提供了统一的事务管理接口。
异常处理:Spring提供一个方便的API将特定技术的异常(由JDBC, Hibernate, 或JDO抛出)转化为一致的、Unchecked异常。
3、Spring框架的模块
核心容器,Spring上下文,Spring AOP,Spring Dao,Spring ORM,Spring Web,Spring MVC;
4、Spring Core与Spring 上下文
核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFacotory是IoC容器的核心接口,负责实例化,定位,配置应用程序中的对象及建立这些对象间的依赖。
Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。
5、BeanFactory – BeanFactory 实例
BeanFactory是工厂模式的一种实现,它使用控制反转将应用的配置和依赖与实际的应用代码分离开来。
6、XmlBeanFactory
XmlBeanFacotory实现BeanFactory接口,它根据XML文件中定义的内容加载beans,组成应用对象及对象间的依赖关系。
7、AOP模块
通过配置管理特性,Spring AOP 模块直接将面向切面的编程功能集成到了 Spring 框架中。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。
8、Dao模块
Spring提供了还异常层次结构,可用来管理异常处理和不同数据库供应商抛出的错误消息;降低了需要编写的异常代码数量。
9、ORM模块
Spring框架插入了若干个ORM框架,从而提供了ORM的对象关系工具,其中包括Hibernate和MyBatis。
10、Web模块
Web上下文模块建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文。
11、MVC模块
Spring Web MVC是一种基于Java的实现了Web MVC设计模式的轻量级Web框架,也就是使用了MVC架构模式的思想,通过控制反转将控制逻辑和业务对象完全分离开来。
12、Spring的配置文件
Spring的配置文件是一个XML文件,文件包含了类信息并描述了这些类是如何配置和互相调用的。
13、IOC容器
就是一个大的抽象工厂,通过依赖注入的方式,负责创建和管理对象以及之间的关系(对象之间的依赖)。
14、IOC的特点
减少了应用程序的代码量;实现了松耦合;
15、Spring中的依赖注入(DI)与控制反转(IOC)
依赖注入和控制反转是对同一件事情的不同描述,依赖注入是从应用程序的角度在描述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;而控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。
16、有哪些不同类型的IOC(依赖注入),如何选择?
1)接口注入;setter方法注入;构造方法注入;
2)使用构造器参数实现强制依赖注入,使用setter方法实现可选的依赖关系。
17、应用上下文是如何实现
1)ClassPathXmlApplicationContext:从classpath处获取xml文件来加载一个上下文。
2)FileSystemXmlApplicationContext:从文件系统中获取xml文件来加载一个上下文。
3)XmlWebApplicationContext:从web应用获取xml文件来加载一个上下文。
18、Bean Factory和ApplicationContext有什么区别?
ApplicationContext继承自BeanFactory接口,除了包含BeanFactory的所有功能之外,在国际化支持、资源访问(如URL和文件)、事件传播等方面进行了良好的支持。
19、什么是Spring Beans?
Spring Beans是构成Spring应用核心的Java对象。这些对象由Spring IOC容器实例化、组装、管理。spring框架中所有的bean都默认为单例bean。
20、Spring Bean中定义了什么内容?
定义了所有的配置元数据,这些配置信息告知容器如何创建它,它的生命周期是什么以及它的依赖关系。
21、向Spring 容器提供配置元数据的三种方法
XML配置文件;基于注解配置;基于Java的配置
22、如何定义bean的作用域
只需要在bean定义的时候通过’scope’属性定义即可。singleton返回一个实例,prototype每次产生一个新实例。
23、Spring中支持的bean作用域
•singleton:在Spring IOC容器中仅存在一个Bean实例,Bean以单实例的方式存在。默认
•prototype:一个bean可以定义多个实例。
•request:每次HTTP请求都会创建一个新的Bean。该作用域仅适用于WebApplicationContext环境。
•session:一个HTTP Session定义一个Bean。该作用域仅适用于WebApplicationContext环境.
•globalSession:同一个全局HTTP Session定义一个Bean。该作用域同样仅适用于WebApplicationContext环境.
24、Spring框架中单例beans是线程安全的吗?
不是
25、Spring框架中bean的生命周期
•Spring容器读取XML文件中bean的定义并实例化bean。
•Spring根据bean的定义设置属性值。
•如果该Bean实现了BeanNameAware接口,Spring将bean的id传递给setBeanName()方法。
•如果该Bean实现了BeanFactoryAware接口,Spring将beanfactory传递给setBeanFactory()方法。
•如果任何bean BeanPostProcessors 和该bean相关,Spring调用postProcessBeforeInitialization()方法。
•如果该Bean实现了InitializingBean接口,调用Bean中的afterPropertiesSet方法。如果bean有初始化函数声明,调用相应的初始化方法。
•如果任何bean BeanPostProcessors 和该bean相关,调用postProcessAfterInitialization()方法。
•如果该bean实现了DisposableBean,调用destroy()方法。
26、哪些是最重要的bean生命周期方法?能重写它们吗?
有两个重要的bean生命周期方法。第一个是setup方法,该方法在容器加载bean的时候被调用。第二个是teardown方法,该方法在bean从容器中移除的时候调用。
bean标签有两个重要的属性(init-method 和 destroy-method),你可以通过这两个属性定义自己的初始化方法和析构方法。Spring也有相应的注解:@PostConstruct 和 @PreDestroy。
27、什么是Spring的内部bean?
当一个bean被用作另一个bean的属性时,这个bean可以被声明为内部bean。在基于XML的配置元数据中,可以通过把元素定义在 或元素内部实现定义内部bean。内部bean总是匿名的并且它们的scope总是prototype。
28、如何在Spring中注入Java集合类?
•list元素用来注入一系列的值,允许有相同的值。
•set元素用来注入一些列的值,不允许有相同的值。
•map用来注入一组”键-值”对,键、值可以是任何类型的。
•props也可以用来注入一组”键-值”对,这里的键、值都字符串类型。
29、什么是bean wiring?
bean Wiring也叫自动装配,就是将一个Bean注入到其他Bean的Property中结合在一起的情况。
30、自动装配的五种模式
no——默认情况下,不自动装配,通过“ref”attribute手动设定。
buName——根据Property的Name自动装配,如果一个bean的name,和另一个bean中的Property的name相同,则自动装配这个bean到Property中。
byType——根据Property的数据类型(Type)自动装配,如果一个bean的数据类型,兼容另一个bean中Property的数据类型,则自动装配。
constructor——根据构造函数参数的数据类型,进行byType模式的自动装配。
autodetect——如果发现默认的构造函数,用constructor模式,否则,用byType模式。
31、自动装配的局限性
•重写:你仍然需要使用 和< property>设置指明依赖,这意味着总要重写自动装配。
•原生数据类型:你不能自动装配简单的属性,如原生类型、字符串和类。
•模糊特性:自动装配总是没有自定义装配精确,因此,如果可能尽量使用自定义装配。
32、你可以在Spring中注入null或空字符串吗?
可以
二、Spring注解
1、什么是Spring基于Java的配置?
基于Java的配置允许你使用Java的注解进行Spring的大部分配置而非通过传统的XML文件配置。
2、什么是基于注解的容器配置?
直接在类中进行配置,通过注解标记相关的类、方法或字段声明。
3、如何开启注解装配?
注解装配默认情况下在Spring容器中是不开启的;
开启基于注解的装配需在Spring配置文件中配置 <context:annotation-config/>
4、@Required 注解
表明bean的属性必须在配置时设置,可以在bean的定义中明确指定也可通过自动装配设置。如果bean的属性未设置,则抛出BeanInitializationException异常。
5、@Autowired 注解
通过匹配数据类型自动装配Bean,提供更加精细的控制,包括自动装配在何处完成以及如何完成。
6、@Qualifier 注解
当有多个相同类型的bean而只有其中的一个需要自动装配时,将@Qualifier 注解和@Autowire 注解结合使用消除这种混淆,指明需要装配的bean。
三、Spring数据访问
1、在Spring框架中如何更有效的使用JDBC?
Spring框架中可以使用JdbcTemplate能更有效的使用JDBC,通过statements和queries语句从数据库中存取数据。
2、JdbcTemplate
JdbcTemplate是Spring框架自带的对JDBC操作的封装,目的是提供统一的模板方法使对数据库的操作更加方便、友好,效率也不错。在实际应用中还需要和hibernate、mybaties等框架混合使用。
3、Spring对DAO的支持
Spring对数据访问对象(DAO)的支持旨在使它可以与数据访问技术方便的结合起来工作,并且提供了一套抽象DAO类进行扩展,这可以很轻松在的不同的持久层技术间切换,编码时也无需担心会抛出特定技术的异常。
4、使用Spring可以通过什么方式访问Hibernate?
1)使用Hibernate Template的反转控制以及回调方法
2)继承HibernateDAOSupport,并申请一个AOP拦截器节点
5、Spring支持的ORM
Hibernate,Mybatis,SQL server
6、如何通过HibernateDaoSupport将Spring和Hibernate结合起来?
使用Spring的SessionFactory 调用LocalSessionFactory。具体步骤:
1)配置Hibernate SessionFactory;
2)继承HibernateDaoSupport实现一个DAO;
3)使用AOP装载事务支持。
7、Spring支持的事务管理类型
1)编程式事务管理:这意味着你可以通过编程的方式管理事务,这种方式带来了很大的灵活性,但很难维护;
2)声明式事务管理:这种方式意味着你可以将事务管理和业务代码分离。你只需要通过注解或者XML配置管理事务。
8、Spring框架的事务管理有哪些优点?
•它为不同的事务API(如JTA, JDBC, Hibernate, JPA, 和JDO)提供了统一的编程模型。
•它为编程式事务管理提供了一个简单的API而非一系列复杂的事务API(如JTA).
•它支持声明式事务管理。
•它可以和Spring 的多种数据访问技术很好的融合。
9、你更推荐那种类型的事务管理?
许多Spring框架的用户选择声明式事务管理,因为这种方式和应用程序的关联较少,因此更加符合轻量级容器的概念。声明式事务管理要优于编程式事务管理,尽管在灵活性方面它弱于编程式事务管理(这种方式允许你通过代码控制业务)。
四、Spring 面向切面编程
1、AOP
面向切面编程,采用动态代理的方式,
允许程序员模块化横向业务逻辑,或定义核心部分的功能,例如日志管理和事务管理。
2、切面(Aspect)
AOP的核心就是切面,它将多个类的通用行为封装为可重用的模块。该模块含有一组API提供 cross-cutting功能。例如,日志模块称为日志的AOP切面。根据需求的不同,一个应用程序可以有若干切面。在Spring AOP中,切面通过带有@Aspect注解的类实现。
3、在Spring AOP中concern和 cross-cutting concern的区别是什么?
Concern(核心逻辑):表示在应用程序中一个模块的行为。Concern可以定义为我们想要实现的功能。
Cross-cutting concern(横向的通用逻辑):指的是整个应用程序都会用到的功能,它影响整个应用程序。例如,日志管理(Logging)、安全管理(Security)以及数据交互是应用程序的每个模块都要涉及到的,因此这些都属于Cross-cutting concern。
4、连接点(Join point)
连接点代表应用程序中插入AOP切面的地点。它实际上是Spring AOP框架在应用程序中执行动作的地点。
5、通知(Advice)
通知表示在方法执行前后需要执行的动作。实际上它是Spring AOP框架在程序执行过程中触发的一些代码。Spring切面可以执行一下五种类型的通知:
1)before(前置通知):在一个方法之前执行的通知。
2)after(最终通知):当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。
3)after-returning(后置通知):在某连接点正常完成后执行的通知。
4)after-throwing(异常通知):在方法抛出异常退出时执行的通知。
5)around(环绕通知):在方法调用前后触发的通知。
6、切入点(Pointcut)
切入点是一个或一组连接点,通知将在这些位置执行。可以通过表达式或匹配的方式指明切入点。
7、什么是引入?
引入允许我们在已有的类上添加新的方法或属性。
8、什么是目标对象?
被一个或者多个切面所通知的对象。它通常是一个代理对象。也被称做被通知(advised)对象。
9、什么是代理?
代理是将通知应用到目标对象后创建的对象。从客户端的角度看,代理对象和目标对象是一样的。
10、有几种不同类型的自动代理?
•BeanNameAutoProxyCreator:bean名称自动代理创建器
•DefaultAdvisorAutoProxyCreator:默认通知者自动代理创建器
•Metadata autoproxying:元数据自动代理
11、什么是织入?什么是织入应用的不同点?
织入是将切面和其他应用类型或对象连接起来创建一个通知对象的过程。织入可以在编译、加载或运行时完成。
12、解释基于XML Schema方式的切面实现
在这种情况下,切面由使用XML文件配置的类实现。
13、解释基于注解方式(基于@AspectJ)的切面实现
在这种情况下(基于@AspectJ的实现),指的是切面的对应的类使用Java 5注解的声明方式。
五、Spring的MVC框架
1、什么是Spring的MVC框架?
Spring Web MVC是一种基于Java的实现了Web MVC设计模式的轻量级Web框架,也就是使用了MVC架构模式的思想,通过控制反转将控制逻辑和业务对象完全分离开来。
2、Spring MVC运行原理
整个处理过程从一个HTTP请求开始:
1)客户端发出一个http请求给web服务器,web服务器对请求进行解析,如果匹配DispatcherServlet的请求映射路径,web容器将请求转交给DispatcherServlet;
2)DispatcherServlet接收到客户端请求,根据URL映射规则及HandlerMapping的配置,找到对应的处理器(Handler),再由DispatcherServlet将处理权交给HandlerAdapter对Handler进行具体调用;
3) 处理该请求后,会返回一个ModelAndView;
4)DispatcherServlet根据得到的ModelAndView中的视图对象,找到一个合适的ViewResolver(视图解析器),DispatcherServlet根据视图解析器的配置将要显示的数据传给对应的视图,最后显示给用户。
3 、DispatcherServlet
Spring的MVC框架围绕DispatcherServlet来设计的,它用来处理所有的HTTP请求和响应。
4、WebApplicationContext
WebApplicationContext继承了ApplicationContext,并添加了一些web应用程序需要的功能。和普通的ApplicationContext 不同,WebApplicationContext可以用来处理主题样式,它也知道如何找到相应的servlet。
5、什么是Spring MVC框架的控制器?
控制器提供对应用程序行为的访问,通常通过服务接口实现。控制器解析用户的输入,并将其转换为一个由视图呈现给用户的模型。Spring 通过一种极其抽象的方式实现控制器,它允许用户创建多种类型的控制器。
6、@Controller annotation
@Controller注解表示该类扮演控制器的角色。Spring不需要继承任何控制器基类或应用Servlet API。
7、@RequestMapping annotation
@RequestMapping注解用于将URL映射到任何一个类或者一个特定的处理方法上。
8、Spring MVC整合
1)首先,要在web.xml里面配置SpringMVC的核心控制器,DispatcherServlet,对指定的后缀请求进行拦截。
2)Controller层要加 @Controller注解,表明该类是MVC的控制层。
3)创建Service接口,给接口加上注解 @Component或者 @Service 表明这是Service业务处理层
4)在Controller层声明Service变量(属性),给变量(属性) 加上 @Autowired注解,通过自动绑定机制将Service注入到Controller。 (注:@Autowired默认是ByType,如果想根据属性名注入,那么就再加上注解 @Resource(name="属性名"))
5)在Controller层的方法上加上注解 @RequestMapping("requestAddress") 表明该方法的请求地址
6)Dao层要加上注解 @Repository 表明这是数据库持久层
7)同样将dao实例注入到service层中。
8)配置视图解析器 "InternalResourceViewResolver",对处理后的跳转进行统一配置。
框架--Spring
最新推荐文章于 2024-08-20 16:01:03 发布