根据多个参考资料,总结如下:

Spring的概念

  Spring是一种多层的J2EE应用程序框架,其核心就是提供一种新的机制管理业务对象及其依赖关系。它是一种容器框架,用于创建bean,维护bean之间的关系,它可以管理web层,持久层,业务层等,可以配置各个层的组件并且维护各个层的关系

Spring特点

  (1)轻量级:轻量级是针对重量级容器(EJB)来说的,Spring的核心包就不到1M大小,而使用Spring的核心包所需的资源也很小,所以可以在小型设备中使用。  

  (2)非入侵式:Spring目标是一个非入侵式的服务框架。原因是所有框架都是提供大量的功能供用户去使用,从而简化开发时间和成本,但由于大量的使用了框架的API,使应用程序和框架发生了大量的依赖性,无法从框架中独立出来,更加无法使程序组件在其他程序中使用。

  (3)容器:Spring提供了容器功能,容器可以管理对象的生命周期、对象与对象间的关系、我们可以通过编写XML来设置对象关系和初始值,这样容器在启动之后,所有的对象都直接可以使用,不用编写任何编码来产生对象。Spring有两种不同的容器:Bean工厂以及应用上下文

Spring工作原理

  Spring内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置文件来动态的创建对象和调用对象里的方法的 。

  Spring还有一个核心就是AOP面向切面编程,可以为某一类对象进行监督和控制(也就是在调用这类对象的具体方法的前后去调用你指定的模块)从而达到对一个模块扩充的功能。这些都是通过配置类达到的。

  Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置 内部通过反射去动态的组装对象)

   要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。

     Spring里用的最经典的一个设计模式就是:模板方法模式。

spring 的2个核心技术:

ioc/di:控制反转/依赖注入

  【内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置文件来动态的创建对象,和调用对象里的方法的 。】

  所谓IoC(控制反转),对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。

  IoC的一个重点(DI 依赖注入)是在系统运行中,动态的向某个对象提供它所需要的其他对象(因此又叫DI)。如对象A定义一个引用B(对象),至于这个B对象怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个B对象,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖B才能正常运行,而这个B是由spring注入到A中的,依赖注入的名字就这么来的。DI原理:Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。

  没有spring时:在一个对象中,如果要使用另外的对象,就必须得到它(自己new一个,或者从JNDI中查询一个),使用完之后还要将对象销毁(比如Connection等),对象始终会和其他的接口或类藕合起来。

  有spring时:所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。

aop:面向切面:

  AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。

  AOP的核心思想就是“将应用程序中的商业逻辑同对其提供支持的通用服务进行分离。”

  AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常伴随在核心关注点前后使用,而各处都基本相似。比如权限认证、日志、事务处理。

  AOP技术,利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。Spring采用动态代理织入,而AspectJ采用编译器织入和类装载期织入。

  Spring AOP使用了两种动态代理机制:一种是基于JDK的动态代理,一种是基于CGLib的动态代理。JDK1.3以后,java提供了动态代理技术,允许开发者在运行期间动态的创建接口的代理实例,JDK的动态代理主要涉及到java.lang.reflect包中的两个类:Proxy和InvocationHandler。CGLib采用非常底层的字节码技术,可以为一个类创建子类,并在子类中采用方法拦截的结束拦截所有父类方法的调用,并顺势织入横切逻辑。

spring的基本用法:

1、关于spring容器:
  spring容器是Spring的核心,该容器负责管理spring中的java组件,
  ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");//这种方式实例化容器,容器会自动预初始化所有Bean实例
  ctx.getBean("beanName");
  ApplicationContext 实例正是Spring容器。
  ApplicationContext容器默认会实例化所有的singleton Bean
  Spring容器并不强制要求被管理组件是标准的javabean。

2、Spring的核心机制:依赖注入。
  不管是依赖注入(Dependency Injection)还是控制反转(Inversion of Conctrol),其含义完全相同:
  当某个java实例(调用者)需要调用另一个java实例(被调用者)时,传统情况下,通过调用者来创建被调用者的实例,通常通过new来创建,
  而在依赖注入的模式下创建被调用者的工作不再由调用者来完成,因此称之为"控制反转";创建被调用者实例的工作通常由Spring来完成,然后注入调用者,所以也称之为"依赖注入"。

3、依赖注入一般有两种方式:
  设置注入:IoC容器使用属性的setter方式注入被依赖的实例。<property name="" ref="">
  构造注入:IoC容器使用构造器来注入被依赖的实例。<constructor-arg ref="">
  配置构造注入的时候<constructor-arg>可以配置index属性,用于指定该构造参数值作为第几个构造参数值。下标从0开始。

参考(很全面):https://blog.csdn.net/y13530828499/article/details/6648155

最新文章

  1. Linux基础3(用户/组管理,rpm,yum,源码安装软件)
  2. makefile--编译出现,未定义的字符
  3. 盘点 OSX 上最佳的 DevOps 工具
  4. 加一个 时间戳 TimeStamp 可以解决 重复提交问题 SqlServer
  5. Ant构建和部署项目(转)
  6. 小波变换 C++ opencv 实现
  7. bzoj 1927 [Sdoi2010]星际竞速(最小费用最大流)
  8. Facebook和Google如何激发工程师的创造力
  9. HDU_2055——刷题不要使用fflush()
  10. absolute vs fixed
  11. ubuntu16 网络设置
  12. empty,is_null,isset返回值的比较
  13. 使用SQL 从表中取记录
  14. ANDROID基础ACTIVITY篇之Activity的加载模式
  15. virsh 常用操作
  16. Android 中与 so 有关的一个大坑
  17. 拓展abaqus python 模块
  18. HDU 2006 求奇数的乘积
  19. Matlab信号处理基础
  20. 1021. Remove Outermost Parentheses删除最外层的括号

热门文章

  1. 03 MySQL之数据类型和运算符
  2. mybaits及mybaits generator 插件使用指南(亲测原创)
  3. Cloudera Manager 常见异常
  4. centos7安装kvm及kvm管理
  5. 字符串写入到json文件
  6. CTF—攻防练习之Capture the Flag
  7. 架构模式: API网关
  8. 深入理解JVM(二)JVM内存模型
  9. pynput模块—键盘鼠标操作和监听
  10. Python time strptime()方法