Spring的简介:
Spring是一个开源的框架
Spring为简化企业级的开发而生
Spring是一个IOC(DI)和AOP容器框架
Spring的特性: 非侵入式(不依赖Spring的API)、依赖注入、面向切面编程、容器、组件化、一站式。
Spring的上下文:
AnnotationConfigApplicationContext: 从一个或多个基于Java配置类中加载Spring上下文。
AnnotationConfigWebApplicationContext : 从一个或多个基于Java的配置类中加载Spring Web 应用上下文。
ClassPathXmlApplicationContext : 从类路径下的一个或多个XML配置文件中加载上下文定义,把应用上下文的定义文件作为类资源。
FileSystemXmlApplicationContext : 从文件系统下的一个或多个XML配置文件中加载上下文定义。
XmlWebApplicationContext : 从Web应用下的一个或多个Xml配置文件中加载上下文定义。
IOC(Inversion of Control) 反转控制
在应用程序中的组件需要获取资源时,传统的方式是组件主动的从容器中获取所需要的资源,在这样的模式下开发人员往往需要知道在具体容器中特定资源的获取方式,增加了学习成本,同时降低了开发效率。
反转控制的思想完全颠覆了应用程序组件获取资源的传统方式:反转了资源的获取方向——改由容器主动的将资源推送给需要的组件,开发人员不需要知道容器是如何创建资源对象的,只需要提供接收资源的方式即可,极大的降低了学习成本,提高了开发的效率。这种行为也称为查找的被动形式。
DI(Dependency Injection):依赖注入
DI是IOC的具体实现,IOC是一种思想,他的实现只要是依靠DI来完成。大致意思是IOC容器中已经创建好了,你只需要告诉容器你需要那个,容器会自动给注入进去。
在实现依赖注入之前,需要几个知识的铺垫:
首先,实现IOC必须要有一个IOC的容器,那么就得说在Spring中如何实现IOC容器。
① BeanFactory:IOC容器的基本实现,是Spring内部的基础设施,是面向Spring本身的,不是提供给开发人员使用的。
② ApplicationContext:BeanFactory的子接口,提供了更多高级特性。面向Spring的使用者,几乎所有场合都使用ApplicationContext而不是底层的BeanFactory。
再者,就是ApplicationContext.xml中的bean是什么?
你可以把他看成是一个对象,在创建IOC容器时,会将*.XML中的bean标签封装成对象(默认是单例的)
这时就是在注入,这里就跟传统的在代码中new对象就不同了(PS:关于bean的东西注入方式(bean标签、注解),生命空间、后置处理器,会在另一篇博客里面写)
Spring的AOP:(面向切面编程)
学AOP必须要会动态代理
代理设计模式的原理:使用一个代理将原本对象包装起来,然后用该代理对象”取代”原始对象。任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。JDK的动态代理,cglib动态代理
AOP简介:
- AOP(Aspect-Oriented Programming,面向切面编程):是一种新的方法论,是对传
统 OOP(Object-Oriented Programming,面向对象编程)的补充。
面向对象 纵向继承机制
面向切面 横向抽取机制
2.AOP编程操作的主要对象是切面(aspect),而切面用于模块化横切关注点(公共功能)。
3.在应用AOP编程时,仍然需要定义公共功能,但可以明确的定义这个功能应用在哪里,以什么方式应用,并且不必修改受影响的类。这样一来横切关注点就被模块化到特殊的类里——这样的类我们通常称之为“切面”。
4.AOP的好处:
① 每个事物逻辑位于一个位置,代码不分散,便于维护和升级
② 业务模块更简洁,只包含核心业务代码
③ AOP图解
AOP的各专业术语:
横切关注点(非核心业务)、切面(提取出来的非核心业务组成的AOP实现类)、通知(AOP实现类的具方法)、目标(AOP的实现类)、代理(调用核心方法后返回的对象)、连接点(after,before,Throw,Return)、切入点(具体是在哪个核心函数中执行)。
通知、切入点(重要):细节部分单独来讲
Spring中AOP的应用: AspectJ(应用最广泛最成熟的框架 2.0以后支持)
配置:
<aop:aspectj-autoproxy>
当Spring IOC容器侦测到bean配置文件中的<aop:aspectj-autoproxy>元素时,会自动为 与AspectJ切面匹配的bean创建代理