网站首页 > 技术教程 正文
1.什么是Spring框架?
Spring是一个轻量级的java开源框架,为了解决企业级应用开发的复杂性创建的java开发平台,其核心是为了简化java开发,为了简化java开发,Spring采取以下四种策略:
基于pojo的轻量级和最小入侵式编程。
通过依赖注入和面向接口编程实现松耦合
基于切面实现声明式编程
通过切面和模板减少样板式代码
2.Spring框架有哪些主要的模块?
Spring IOC : Spring的核心模块,包含了最基本的IoC容器BeanFactory的接口和实现,IOC容器的高级使用行态ApplicationContext应用上下文供用户使用。
Spring Aop: Spring的核心模块,围绕着AOP的增强功能,Spring集成了Aspectj作为AOP的一个特定实现,同时还基于jdk动态代理(代理对象有接口的时候)/CGLIB(字节码生成的开源类库,代理对象没接口的时候)的基础上,实现了一个AOP框架。
Spring MVC : 以DispatcherServlet为核心,实现了MVC模式,包括怎么样与WEB容器环境的集成,web请求的分发,拦截,处理和ModelAndView数据的返回,以及如何集成各种UI视图展现和数据表现。
Spring jdbc/Spring ORM :Spring 对jdbc做了一层封装,提供了JdbcTemplate作为模板类,Spring提供了许多对ORM工具的封装。
Spring 事务处理:Spring事务处理是使用Spring aop对功能进行增强的模块,提供IOC容器读入配置。
3.什么是控制反转?什么是依赖注入?
控制反转也称为依赖倒置原则,如果对象之间的依赖关系由具体的对象来完成,那么将要导致代码的高度耦合和可测试性降低,如果把对象的依赖关系交给Ioc容器或者框架来完成,把具体的控制权交给平台或者框架来处理,将会降低面向对象系统设计的复杂性和提高系统的可测试性,控制反转是指一个对象如何获取它所依赖的对象的引用,反转是指责任的反转。
4.Spring IOC 应用场景
Spring中,Spring IOC 提供了JavaBean容器,通过IOC模式管理依赖关系,并通过依赖注入和AOP切面增强了为JavaBean这样的POJO对象赋予了事务管理等基本功能,使用IOC容器,把资源获取的方向反转,让IOC容器主动管理这些依赖关系,将这些依赖关系注入到组件中,那么会让这些依赖关系的适配和管理更加灵活,有三种注入方式:
接口注入
setter注入
构造器注入
5.BeanFactory和ApplicationContext的区别
在Spring容器中主要有两个系列的基本容器,一个是实现BeanFactory接口的简单系列容器,这个容器只实现了最基本容器功能;另一个是ApplicationContext应用上下文,它作为容器的高级形态而,这个容器在简单容器的基础上增加了许多面向框架的特性。
ApplicationContext容器提供了BeanFactory不具备的新特性:
支持不同的信息源。
访问资源。
支持应用事件。
在ApplicationContext提供附加服务。
几种应用上下文(IoC容器):
1.AnnotationConfigApplicationContext:从一个或多个基于java配置类中加载Spring应用上下文,加载bean,然后包装成BeanDefinition。
2.AnnotationConfigWebApplicationContext:从一个或多个基于java配置类中加载Spring Web应用上下文,加载bean。
3.ClassPathXmlApplicationContext:从类路径下的一个或多个xml配置文件中加载Spring应用上下文。
4.FileSystemXmlApplicationContext:从文件系统下的一个或多个XML配置文件中加载上下文定义。
5.XmlWebApplicationContext:从web应用下的一个或多个xml配置文件中加载上下文定义。
6. Spring的配置方式
1.基于xml配置。
2.基于注解的配置
3.基于java类的配置
7.如何使用基于xml配置的方式配置Spring
使用xml文件配置,bean标签。
8.如何适应基于java类的方式配置Spring
对于java配置类加上@Configration注解,对于pojo加上@Bean注解。
9.如何使用基于注解的方式配置Spring
这种方式也叫做自动化装配(应用组件之间的协作),Spring从两个角度实现自动化装配
1.组件扫描:Spring会自动发现应用上下文所创建的bean
为pojo加上@Component注解,表明它是一个java bean。在通过@ComponnentScan注解来开启组件扫描(java 类配置的方式@Configuration注解)或者xml文件,默认会扫描与配置类相同的包。
如何设置扫描的基础包:@ComponentScan(basesPackage={"包名","包名"})
2.自动装配:Spring自动满足bean之间的依赖。
让Spring自动满足bean依赖的一种方法,可以使用@Autowired注解进行自动装配。
10.Spring bean的生命周期(bean的创建过程)
Spring对bean进行实例化
Spring将值和bean引用注入到bean对应的属性中
如果bean实现了BeanNameAware接口,Spring将bean的id传给setBeanName()方法
如果bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFactory传入
如果bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()方法,将bean所在的应用上下文的引用传入进来。
如果bean实现了BeanPostProcessor接口,Spring将调用它们的postProcessBeforeInitialization()方法。
如果bean实现了InitializingBean接口,Spring将调用它们的postProcessAfterInitialization()方法。
此时bean已经准备就绪,可以被应用程序所使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁。
11.Spring bean的作用域
在默认情况下Spring IOC容器中的所有bean都是以单例形式创建的,改变bean作用域可以使用@Scope注解来改变。xml 中 <scope = "prototype">
单例:在整个应用中,只创建bean的一个实例。
原型:每次注入或者通过Spring应用上下文获取的时候,都会创建一个bean实例。
会话:在web应用中,为每个会话创建一个bean实例。
请求:在web应用中,为每个请求创建一个bean实例。
12.Spring用到哪些设计模式
单例模式 --- bean加载默认单例
代理模式 -- AOP
工厂模式 --- Ioc容器BeanFactory就是使用工厂模式
模板方法模式 --- 封装jdbc的方法,jdbcTemplate
控制反转模式 --- Spring核心Ioc的生成。
13.Spring 如何实现IoC
Spring有两种类型的容器BeanFactory和ApplicationContext,
使用Ioc容器时的几个步骤:
创建IoC配置文件的抽象资源,这个抽象资源包含了BeanDefinition的定义信息。
创建一个BeanFactory
创建一个BeanDefinition的读取器,这里使用XmlBeanDefinitionReader来载入XML文件形式的BeanDefinition
从定义好的资源位置读取配置信息,具体的解析过程由XmlBeanDefinitionReader来完成。完成整个载入和注册Bean定义之后,需要的IoC容器就建立起来了。
IoC容器的实现过程:
第一步:IoC容器的初始化,这个过程包括BeanDefinition的Resource定位,载入和注册三个基本过程。
定位:BeanDefinition的资源定位。
BeanDefinition的载入过程,这个载入是指把用户定义好的Bean表示成IoC容器的内部数据结构BeanDefinition。
向IoC容器中注册这些BeanDefinition的过程,就是将BeanDefinition注入到一个HashMap中去,IoC容器就是通过这个HashMap来持有这些BeanDefinition数据的。
第二步:IoC容器的依赖注入
getBean()方法是依赖注入的起点,Bean对象会依据BeanDefinition定义的要求生成,提供了两种实例化java对象的方法,一种通过JVM的反射功能,一种通过前面提到的CGLIB来生成。其依赖关系在BeanDefinition中。
14.Spring如何实现AOP
AOP面向切面编程,Spring提供了两种AOP实现:Spring AOP + AspectJ.
第一步:创建AopProxy代理对象,代理对象的生成有两种生成过程,
1.使用JDK的动态代理。
2.使用字节码生成器CGLIB生成。
如果目标对象是接口类,则采用JDK动态代理方式生成,否则使用CGLIB来生成。
第二步:对调用方法进行拦截,当代理对象的暴露的方法被调用时,首先会对这些方法调用进行拦截,拦截过程在JDK的Proxy代理对象中,是通过invoke方法来完成的,在CGLIB的Proxy代理对象中,拦截是由设置好的回调callback来完成的。
15.Spring 中bean的创建过程
Spring bean实例化,然后调用一系列的生命周期方法完成bean的创建,默认是以单例模式创建的,原型,会话,请求模式。
16.Spring bean的加载机制
Spring中的IoC容器来加载bean,有两种类型的IoC容器,BeanFactory,ApplicationContext。
首先,初始化IoC容器,就是定位,载入和注册BeanDefinition,就是在容器内部维持一个hashmap装载BeanDefinition。然后对IoC容器进行依赖注入,bean对象会根据BeanDefinition的要求生成,通过了两种实例化java对象的方法,JVM反射和CGLIB.
17.Spring MVC是什么?
Spring是一个java软件开发平台,提供IoC AOP 事务处理 持久化等功能,Spring MVC是未用户开发web应用提供支持。
18.Spring IOC容器是怎么样在web环境中发挥作用的?
Spring MVC是建立在IOC容器基础上的,因此要先启动ioc容器,启动过程如下:
从servlet事件中得到ServletContext,然后通过读取web.xml中的配置文件,
ContextLoaderListener被定义为一个监听器,这个监听器是与web服务器生命周期相关联的,因为ContextLoaderListener 实现ServletContextListener接口,这个接口监听ServletContext事件,然后调用ContextLoader初始化Ioc容器。
19.Spring MVC的过程?
Spring MVC的核心是DispatcherServlet,DispatcherServlet继承HttpServlet,DispatcherSevlet的工作主要有两个,
1.DispatcherServlet的启动和初始化,DispatcherServlet的启动过程是和Servlet的启动过程相联系的,Servlet初始化时其init方法会被调用,DispatcherServlet的初始化过程由其基类的HttpServletBean完成,接着会执行DispatcherServlet的持有的IoC容器的初始化过程,初始化时一个新的上下文被建立起来,这个上下文被设置为根上下文的子上下文,和Servlet对应的一个上下文。DispatcherServlet会初始化HandlerMapping和ViewResolver,默认使用的HandlerMapping是BeanNameUrlHandlerMapping
对HTTP请求进行响应:在初始化完成之后,上下文环境已经定义的HandlerMapping已经被加载了,这些加载的HandlerMapping被放到一个List中,这个List中的每一个元素对应着一个具体的HandlerMapping得配置,每个HandlerMapping持有一系列的从url到Controller的映射,通过HandlerMapping接口类的getHandler()方法,可以获得与HTTP请求对应的HandlerExecutionChain,这个HandlerExecutionChain它有一个Inteceptor链和一个Controller对象.
Spring MVC的执行步骤
建立Controller对象和HTTP请求之间的映射关系,这个工作是由HandlerMapping中封装的HandlerExecutionChain对象来完成的,对Controller对象和URL的映射关系式在配置bean中描述的,并在IOC容器(WebApplicationContext)中初始化,这些映射关系会被放入到hashmap中。
在mvc框架接受http请求之后,会在handlermapping中进行查询,从而得到对应的HandlerExecutionChain,这个HandlerExecutionChain封装了配置的Controller对象,这个Controller对象会完成的请求的响应动作,生成需要的ModelAndView对象
得到ModelAndView以后,DispatcherServlet会把模型数据交给特定的视图对象。
20.Spring支持事物,如何管理?
Spring事务处理模块是通过AOP功能来实现声明式事务处理的,通过TransactionProxyFactoryBean可以生成Proxy代理对象,在这个代理对象中,通过TransactionInterceptor来完成代理方法的拦截,将事务处理的功能编织进来,在实现声明式事务处理时是AOP和IOC模块集成的部分,对于具体的事务处理实现,比如事务的生成,提交,挂起,回滚,对于不同的数据库处理方式做了一个抽象和适配,适配的具体事务处理器包括,对DataSource数据源的事务处理支持,对Hibernate数据源的事务处理支持等。
21.Spring Dao那种设计模式用的最多?
模板方法设计模式,JdbcTemplate就是Spring对jdbc进行封装的数据库操作的类。
22.Spring MVC用过哪些注解?
@Controoler ---- 定义这个pojo是Controller
@Autowired ---- 注入这个对象
@RequestMapping --- 定义url映射关系
@SessionAttributes --- 设置会话对象
@ResponseBody --- 响应体
@Transactional --- 对数据库操作做事务处理
23.Spring AOP 场景和底层实现?
事务处理,日志打印就是一个典型的aop应用,生成代理对象AopProxy然后对调用方法进行拦截,从而实现对目标对象的增强,生成AopProxy的过程由两种,当代理对象实现接口时,使用jdk动态代理,当没有接口时使用CGLIB来生成字节码文件,cglib底层采用的是对ASM,ASM是一个可以动态修改已经编译过的class文件或者是动态生成新的java class。
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群346942462,我们一起学Java!
- 上一篇: 浅谈Java泛型 java泛型的实现原理
- 下一篇: 网易面经(Java岗) 网易面试题 java
猜你喜欢
- 2024-10-02 深入浅出经典java架构设计方法 深入浅出经典java架构设计方法
- 2024-10-02 JAVA中的单例模式 java单例模式有几种
- 2024-10-02 IT技术交流:Java 轻量级整合开发 java轻量化ide
- 2024-10-02 java中的单例模式 java中的单例模式代码
- 2024-10-02 Java内部类浅析 java内部类的类型
- 2024-10-02 java基础数据结构分析 java 基础数据结构
- 2024-10-02 一个简单的Swing窗口程序——Java
- 2024-10-02 Java妹子与数据库老头之间的交流 java与数据库的连接怎么实现
- 2024-10-02 Java初学笔记-分享交流 java初学者教程视频
- 2024-10-02 好用到爆的 Java 技巧 java小技巧
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)