lshaoyu

百战程序员——Spring框架

  1. 什么是容器,我们学过了哪些容器,Spring与我们之前学习的容器有哪些异同点?
    • 容器可以管理对象的生命周期、对象与对象之间的依赖关系,您可以使用一个配置文件(通常是XML),在上面定义好对象的名称、如何产生(Prototype 方式或Singleton 方式)、哪个对象产生之后必须设定成为某个对象的属性等,在启动容器之后,所有的对象都可以直接取用,不用编写任何一行程序代码来产生对象,或是建立对象与对象之间的依赖关系。
    • 容器是一个Java 所编写的程序,原先必须自行编写程序以管理对象关系,现在容器都会自动帮您做好。
  2. Spring是什么?为什么使用Spring?
    •   Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。Spring框架本身亦是按照设计模式精心打造,这使得我们可以在开发环境中安心的集成Spring框架,不必担心Spring是如何在后台进行工作的。
      • Dependency Injection(DI) 方法使得构造器和JavaBean properties文件中的依赖关系一目了然。
      • 与EJB容器相比较,IoC容器更加趋向于轻量级。这样一来IoC容器在有限的内存和CPU资源的情况下进行应用程序的开发和发布就变得十分有利。
      • Spring并没有闭门造车,Spring利用了已有的技术比如ORM框架、logging框架、J2EE、Quartz和JDK Timer,以及其他视图技术。
      • Spring框架是按照模块的形式来组织的。由包和类的编号就可以看出其所属的模块,开发者仅仅需要选用他们需要的模块即可。
      • 要测试一项用Spring开发的应用程序十分简单,因为测试相关的环境代码都已经囊括在框架中了。更加简单的是,利用JavaBean形式的POJO类,可以很方便的利用依赖注入来写入测试数据。
      • Spring的Web框架亦是一个精心设计的Web MVC框架,为开发者们在web框架的选择上提供了一个除了主流框架比如Struts、过度设计的、不流行web框架的以外的有力选项。
      • Spring提供了一个便捷的事务管理接口,适用于小型的本地事物处理(比如在单DB的环境下)和复杂的共同事物处理(比如利用JTA的复杂DB环境)。
  3. Spring有哪些特性?
    • 轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。

      控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

      面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。

      容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。

      框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。

      所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。

  4. Spring的重要特征有哪些?
  5. Sping常用jar包有哪些?
  6. Spring的IOC(控制反转),主要的作用是什么,程序中如何体现Spring的控制
                 反转?
    •   

      Rod Johnson是第一个高度重视以配置文件来管理Java实例的协作关系的人,他给这种方式起了一个名字:控制反转(Inverse of Control,IoC)。后来Martine Fowler为这种方式起了另一个名称:依赖注入(Dependency Injection),因此不管是依赖注入,还是控制反转,其含义完全相同。当某个Java对象(调用者)需要调用另一个Java对象(被依赖对象)的方法时,在传统模式下通常有两种做法:

      1. 原始做法: 调用者主动创建被依赖对象,然后再调用被依赖对象的方法。
      2. 简单工厂模式: 调用者先找到被依赖对象的工厂,然后主动通过工厂去获取被依赖对象,最后再调用被依赖对象的方法。

      注意上面的主动二字,这必然会导致调用者与被依赖对象实现类的硬编码耦合,非常不利于项目升级的维护。使用Spring框架之后,调用者无需主动获取被依赖对象,调用者只要被动接受Spring容器为调用者的成员变量赋值即可,由此可见,使用Spring后,调用者获取被依赖对象的方式由原来的主动获取,变成了被动接受——所以Rod Johnson称之为控制反转。

      另外从Spring容器的角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量——相当于为调用者注入它依赖的实例,因此Martine Fowler称之为依赖注入。

  7. 【上机】实现工厂设计模式
  8. 【上机】Spring 的 helloworld程序。
  9. 【上机】无参、有参构造方法管理对象
  10. 静态工厂方法和动态工厂的异同
  11. 【上机】分别实现静态工厂方法和动态工厂方法,总结出静态工厂方法和动态工厂
                 的方法
  12. 【上机】工厂方法管理对象
  13. applicationContext.xml中bean标签的各属性分别有何意义
    •   
  14. bean的作用域有哪些?各有什么不同?
    • 当通过spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域。Spring支持如下5种作用域:

      • singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例

      • prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例

      • request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效

      • session:对于每次HTTP Session,使用session定义的Bean豆浆产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效

      • globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效

      其中比较常用的是singleton和prototype两种作用域。对于singleton作用域的Bean,每次请求该Bean都将获得相同的实例。容器负责跟踪Bean实例的状态,负责维护Bean实例的生命周期行为;如果一个Bean被设置成prototype作用域,程序每次请求该id的Bean,Spring都会新建一个Bean实例,然后返回给程序。在这种情况下,Spring容器仅仅使用new 关键字创建Bean实例,一旦创建成功,容器不在跟踪实例,也不会维护Bean实例的状态。

        如果不指定Bean的作用域,Spring默认使用singleton作用域。Java在创建Java实例时,需要进行内存申请;销毁实例时,需要完成垃圾回收,这些工作都会导致系统开销的增加。因此,prototype作用域Bean的创建、销毁代价比较大。而singleton作用域的Bean实例一旦创建成功,可以重复使用。因此,除非必要,否则尽量避免将Bean被设置成prototype作用域。

  15. bean的生命周期?
  16. Spring两大核心思想是什么?
    •   Spring框架的两大核心特征:AOP和IoC
  17. 依赖注入是什么
    1.  

       DI—Dependency Injection,即“依赖注入”组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。

        理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”,那我们来深入分析一下:

        ●谁依赖于谁:当然是应用程序依赖于IoC容器

        ●为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源

        ●谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象

        ●注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)

  18. IOC/DI,控制反转/依赖注入,指的都是同一个内容。为什么叫法不一样?
    1.   IoC和DI由什么关系呢?其实它们是同一个概念的不同角度描述,由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维护对象关系),所以2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”,相对IoC 而言,“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”。
  19. 属性注入方式有哪三种?
    1. set注入
    2. 构造注入
    3. 工厂注入
    4. 链接在这里
  20. 怎样注入集合,list、set、map各怎样注入?
    1.   注入详解
  21. Spring中什么是自动装配?
    1.  自动装配
  22. Spring中怎样实现自动扫描?
    1.  <context:component-scan base-package="cn.itcast" />
  23. Spring中基于注解对象,使用哪几个注解,每个注解作用是什么
    1.   https://www.cnblogs.com/xingzc/p/5777814.html
  24. @AutoWired默认按照何种方式匹配注入,存在什么问题
    1.  https://www.cnblogs.com/jsStudyjj/p/4894177.html
  25. @Qualifier有何作用,按照何种方式匹配注入
  26. @Resource按照方式匹配注入
  27. 【上机】实现自动装配与自动扫描
  28. 【上机】练习注入集合 list set map
  29. 静态代理模式有哪些角色,分别是什么
    1.   三个角色
  30. 【上机】实现静态代理模式
  31. 什么是动态代理?有哪几种方式?
    1.   动态代理
  32. 静态代理和动态代理的关系
    1.   
      静态代理通常只代理一个类,动态代理是代理一个接口下的多个实现类。
       
      静态代理事先知道要代理的是什么,而动态代理不知道要代理什么东西,只有在运行时才知道。
       
      动态代理是实现 JDK 里的 InvocationHandler 接口的 invoke 方法,但注意的是代理的是接口,也就是你的
       
      业务类必须要实现接口,通过 Proxy 里的 newProxyInstance 得到代理对象。
       
      还有一种动态代理 CGLIB,代理的是类,不需要业务类继承接口,通过派生的子类来实现代理。通过在运行
      时,动态修改字节码达到修改类的目的。
       
      AOP 编程就是基于动态代理实现的,比如著名的 Spring 框架、 Hibernate 框架等等都是动态代理的使用例子。
  33. 【上机】jdk动态代理实现
  34. 【上机】cglib动态代理实现
  35. 【上机】用户的crud操作,使用Spring 容器管理对象
  36. 【上机】结合Sturts2和Hibernate框架,使用Spring容器管理对象,编写代码
                 实现用户的crud操作
  37. AOP指的是什么?他跟动态代理有什么关系?
    1.   aop详细介绍
  38. AOP的好处是什么
  39. 什么是横切性关注点?
  40. 解释如下名词

横切性关注点

切面

连接点

切入点。

通知

目标对象

织入

引入

    1. 什么是切入点表达式?
    2. 通知有哪几种类型,运行顺序是什么?
      1. (1)Before:在目标方法被调用之前做增强处理,@Before只需要指定切入点表达式即可

        (2)AfterReturning:在目标方法正常完成后做增强,@AfterReturning除了指定切入点表达式后,还可以指定一个返回值形参名returning,代表目标方法的返回值

        (3)AfterThrowing:主要用来处理程序中未处理的异常,@AfterThrowing除了指定切入点表达式后,还可以指定一个throwing的返回值形参名,可以通过该形参名

        来访问目标方法中所抛出的异常对象

        (4)After:在目标方法完成之后做增强,无论目标方法时候成功完成。@After可以指定一个切入点表达式

        (5)Around:环绕通知,在目标方法完成前后做增强处理,环绕通知是最重要的通知类型,像事务,日志等都是环绕通知,注意编程中核心是一个ProceedingJoinPoint

    3. 【上机】xml配置方式实现AOP
    4. 【上机】注解方式实现AOP
    5. AOP运行流程
      1.   

        AOP基本运行流程

    6. 为什么需要事务
      1.   如果我们一个业务逻辑只执行一次sql,是不需要使用事务的。但如果要执行多条sql语句才能完成一个业务逻辑的话,这个时候就要使用事务了。 因为这几条sql可能有的执行成功,有的执行失败。 而事务就是对一组sql语句进行统一的提交或回滚操作,为了保证数据执行的一致性,这组sql不是全部成功就是全部失败。
      2. 转账
    7. 使用事务来解决什么问题,使用事务与不适用事务,数据在程序中和数据中分别是
                   什么状态?
    8. JavaEE中事务隔离级分为哪些,分别是什么,代表什么含义?
      1.   事务
    9. Spring事务管理有哪几个核心组件
    10. 【上机】基于xml实现事务管理
    11. 【上机】基于注解实现事务管理
    12. OpenSessionInView有什么作用?
    13. ThreadLocal模式如何理解?有什么作用?
      1.   
    14. 【上机】完成Struts2、Hibernate、Spring的整合
    15. 【上机】完成Struts2、Hibernate、Spring的整合,实现用户的CRUD,并实现登
              录注册功能,对非系统用户进行拦截。对非登录用户访问除首页外的其他页面或
                   请求,进行拦截。
    16. 56.   BeanFactoryApplicationContext有什么区别?
      1.   https://www.cnblogs.com/yuanmiemie/p/6812163.html
    17. 57.   如何用基于XML与注解配置的方式配置Spring
    18. 58.   Spring Bean的作用域之间有什么区别?
      1.   

        spring bean的作用域之间有什么区别

    19. 59.   解释Spring框架中bean的生命周期?
      1.   https://blog.csdn.net/qq_35580883/article/details/78241621
    20. Spring框架的事务管理有哪些优点?
      1.   它为不同的事务API(如JTA, JDBC, Hibernate, JPA, 和JDO)提供了统一的编程模型。 
        它为编程式事务管理提供了一个简单的API而非一系列复杂的事务API(如JTA). 
        它支持声明式事务管理。 
        它可以和Spring 的多种数据访问技术很好的融合
    21. 在Spring AOP中concern和 cross-cutting concern的区别是什么?
      1.   

        Concern(核心逻辑):表示在应用程序中一个模块的行为。Concern可以定义为我们想要实现的功能。

        Cross-cutting concern(横向的通用逻辑):指的是整个应用程序都会用到的功能,它影响整个应用程序。例如,日志管理(Logging)、安全管理(Security)以及数据交互是应用程序的每个模块都要涉及到的,因此这些都属于Cross-cutting concern。

    22. 有几种不同类型的自动代理?
    23. BeanFactory和ApplicationContext有什么区别?.
    24. 如何用基于Java配置的方式配置Spring?
      1.   
    25. Spring框架中有哪些不同类型的事件?
      1. Spring 提供了以下5中标准的事件:

        • 上下文更新事件(ContextRefreshedEvent):该事件会在ApplicationContext被初始化或者更新时发布。也可以在调用ConfigurableApplicationContext 接口中的refresh()方法时被触发。
        • 上下文开始事件(ContextStartedEvent):当容器调用ConfigurableApplicationContext的Start()方法开始/重新开始容器时触发该事件。
        • 上下文停止事件(ContextStoppedEvent):当容器调用ConfigurableApplicationContext的Stop()方法停止容器时触发该事件。
        • 上下文关闭事件(ContextClosedEvent):当ApplicationContext被关闭时触发该事件。容器被关闭时,其管理的所有单例Bean都被销毁。
        • 请求处理事件(RequestHandledEvent):在Web应用中,当一个http请求(request)结束触发该事件。
    26. FileSystemResource和ClassPathResource有何区别?
      1. spring 中的资源访问和加载 Resource ClassPathResource FileSystemResource ServletContextResource URLResource

    27. Spring框架中都用到了哪些设计模式?
      1.   Spring框架中使用到了大量的设计模式,下面列举了比较有代表性的:
        • 代理模式—在AOP和remoting中被用的比较多。
        • 单例模式—在spring配置文件中定义的bean默认为单例模式。
        • 模板方法—用来解决代码重复的问题。
        • 前端控制器—Srping提供了DispatcherServlet来对请求进行分发。
        • 视图帮助(View Helper )—Spring提供了一系列的JSP标签,高效宏来辅助将分散的代码整合在视图里。
        • 依赖注入—贯穿于BeanFactory / ApplicationContext接口的核心理念。
        • 工厂模式—BeanFactory用来创建对象的实例。
posted on 2019-03-10 19:05  就爱上编程吧  阅读(195)  评论(0编辑  收藏  举报
 

分类:

技术点:

相关文章: