spring问题我爱编程

Spring相关问题

2017-08-22  本文已影响41人  gskobe0811

1.什么是Spring框架?

Spring是一个轻量级的java开源框架,为了解决企业级应用开发的复杂性创建的java开发平台,其核心是为了简化java开发,为了简化java开发,Spring采取以下四种策略:

  1. 基于pojo的轻量级和最小入侵式编程。
  2. 通过依赖注入和面向接口编程实现松耦合
  3. 基于切面实现声明式编程
  4. 通过切面和模板减少样板式代码

2.Spring框架有哪些主要的模块?

  1. Spring IOC : Spring的核心模块,包含了最基本的IoC容器BeanFactory的接口和实现,IOC容器的高级使用行态ApplicationContext应用上下文供用户使用。
  2. Spring Aop: Spring的核心模块,围绕着AOP的增强功能,Spring集成了Aspectj作为AOP的一个特定实现,同时还基于jdk动态代理(代理对象有接口的时候)/CGLIB(字节码生成的开源类库,代理对象没接口的时候)的基础上,实现了一个AOP框架。
  3. Spring MVC : 以DispatcherServlet为核心,实现了MVC模式,包括怎么样与WEB容器环境的集成,web请求的分发,拦截,处理和ModelAndView数据的返回,以及如何集成各种UI视图展现和数据表现。
  4. Spring jdbc/Spring ORM :Spring 对jdbc做了一层封装,提供了JdbcTemplate作为模板类,Spring提供了许多对ORM工具的封装。
  5. Spring 事务处理:Spring事务处理是使用Spring aop对功能进行增强的模块,提供IOC容器读入配置。

3.什么是控制反转?什么是依赖注入?

控制反转也称为依赖倒置原则,如果对象之间的依赖关系由具体的对象来完成,那么将要导致代码的高度耦合和可测试性降低,如果把对象的依赖关系交给Ioc容器或者框架来完成,把具体的控制权交给平台或者框架来处理,将会降低面向对象系统设计的复杂性和提高系统的可测试性,控制反转是指一个对象如何获取它所依赖的对象的引用,反转是指责任的反转。

4.Spring IOC 应用场景

Spring中,Spring IOC 提供了JavaBean容器,通过IOC模式管理依赖关系,并通过依赖注入和AOP切面增强了为JavaBean这样的POJO对象赋予了事务管理等基本功能,使用IOC容器,把资源获取的方向反转,让IOC容器主动管理这些依赖关系,将这些依赖关系注入到组件中,那么会让这些依赖关系的适配和管理更加灵活,有三种注入方式:

5.BeanFactory和ApplicationContext的区别

在Spring容器中主要有两个系列的基本容器,一个是实现BeanFactory接口的简单系列容器,这个容器只实现了最基本容器功能;另一个是ApplicationContext应用上下文,它作为容器的高级形态而,这个容器在简单容器的基础上增加了许多面向框架的特性。
ApplicationContext容器提供了BeanFactory不具备的新特性:

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的创建过程)

11.Spring bean的作用域

在默认情况下Spring IOC容器中的所有bean都是以单例形式创建的,改变bean作用域可以使用@Scope注解来改变。xml 中 <scope = "prototype">

12.Spring用到哪些设计模式

单例模式 --- bean加载默认单例
代理模式 -- AOP
工厂模式 --- Ioc容器BeanFactory就是使用工厂模式
模板方法模式 --- 封装jdbc的方法,jdbcTemplate
控制反转模式 --- Spring核心Ioc的生成。

13.Spring 如何实现IoC

Spring有两种类型的容器BeanFactory和ApplicationContext,
使用Ioc容器时的几个步骤:

IoC容器的实现过程:

第一步:IoC容器的初始化,这个过程包括BeanDefinition的Resource定位,载入和注册三个基本过程。

第二步: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

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。

上一篇下一篇

猜你喜欢

热点阅读