一、spring介绍
1、什么是spring框架
Spring 框架是一个为 Java 应用程序的开发提供了综合、广泛的基础性支持的 Java 平台。 它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件。pring的核心是控制反转(IoC)和面向切面(AOP),spring降低了耦合度,有利于项目维护和扩展。
2、spring的优点
1)采用非浸入式
基于Spring开发的应用中的对象可以不依赖于Spring的API
2)控制反转,低耦合,利于维护
Spring就是一容器,可以将所有对象创建和依赖关系维护,交给Spring管理 。
3) 面向切面编程(AOP编程)
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
4)事务的支持
5)依赖注入
贴上注解,无需使用new
6)方便程序的测试
Spring对Junit4支持,可以通过注解方便的测试Spring程序
7)可以集成各种框架
可以方便集成各种框架,比如mybaties、lombok、fastJson等
3、spring的七大模块
Spring 框架是一个分层架构,由 7 个定义良好的模块组成。
核心容器(spring core)
:核心容器提供了基本功能。核心容器的主要组件是 BeanFactory,BeanFactory负责生产和管理bean的一个工厂,所有的bean都是由BeanFactory(也就是IOC容器)来进行管理的,它负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。
应用上下文(Spring Context)
:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。
面向切面编程( Spring AOP)
:Spring AOP 模块提供了面向切面编程的功能,提供了AOP规范。
Spring DAO
:DAO提供了JDBC的抽象层,它封装了JDBC编码和解析数据库代码,提供了数据库操作接口,JDBC还提供了一种声明性事务管理方法。
Spring ORM
:ORM即对象关系映射。它将关系数据库中表的数据映射成为对象,以对象的形式展现可以把对数据库的操作转化为对这些对象的操作。
Web模块(Spring Web)
:WEB模块提供对常见框架如Struts1、Struts 2、JSF的支持,Spring能够管理这些框架,将Spring的资源注入给框架,也能在这些框架的前后插入拦截器。
MVC模块
:MVC封装包提供了Web应用的MVC实现。Spring的MVC框架提供了一种清晰的分离模型, 实现控制逻辑和业务逻辑的清晰分离。
4、Spring 配置元数据的方式
(1)基于 XML 的配置
(2)基于注解的配置
(3)基于 Java 的配置
5、spring的三大核心思想
IOC(控制反转),DI(依赖注入),AOP(面向切面编程)
1)IOC(控制反转)
控制权由对象本身转向容器,由 Spring IOC 容器根据配置文件来负责对象的生命周期和对象之间的关系。
(1)什么是bean
在Spring中,bean工厂创建的各个实例称作bean
(2)IOC实现方式
a、 读取标注或者配置文件,根据配置文件拿到类名;
b、 利用反射实例化对应的对象实例
2)DI(依赖注入)
指 Spring 创建对象的过程中,将对象依赖属性(简单值,集合,对象)通过配置设值给该对象
依赖注入的三种方式:
(1)构造器注入
(2)Setter 方法注入
(3)接口注入
3)AOP(面向切面编程)
利用一种称为"横切"的技术,横切多个对象的内部,并将那些影响了多个类的公共行为抽出成一个公共的切面(Aspect)。这种方式可以减少重复代码,降低耦合度,利于维护。利用AOP可以方便 的实现限认证、日志、事物等功能。
切入点(Pointcut)
:在什么类、什么方法上面切入
通知(Advice)
:在方法执行的什么时机(是在方法前、方法后、方法前后)做什么(what:增强的功能)
切面(Aspect)
:切面 = 切入点 + 通知;在什么类的什么方法的什么时机做什么
织入(Weaving)
:spring把切织入到对象然后创建出代理对象的过程。
二、spring的其它
1、BeanFactory和FactoryBean区别
1) BeanFactory是个工厂,也就是IOC容器顶级接口或对象工厂,负责对bean的创建,访问等工作,还能在实例化对象的时候生成类之间的关系,还包含了 bean 生命周期的控制(它能调用初始化和销毁方法)。
2) FactoryBean是个bean,可以返回bean实例的工厂bean,通过实现该接口可以对bean进行一些额外的操作,例如根据不同的配置类型返回不同类型的bean。FactoryBean的实现类最终也需要注册到BeanFactory中。
2、BeanFactory 和 ApplicationContext 有什么区别
1) 上面说到了,BeanFactory是个工厂,是IOC容器顶级接口,负责对bean的创建,访问。
2) ApplicationContext是应用上下文,继承BeanFactory接口,它是Spring的一各更高级的容器,提供了更多的功能。例如国际化、统一资源访问方式、载入多个上下文 、消息发送、消息响应、AOP功能。
常见的 ApplicationContext 实现方式:
ClassPathXmlApplicationContext
:从 classpath 的 XML 配置文件中读取上下文,并生成
上下文定义。
FileSystemXmlApplicationContext
:由文件系统中的 XML 配置文件读取上下文。
XmlWebApplicationContext
:由 Web 应用的 XML 文件读取上下文。
3、@Autowired和@Resource区别
1)@Resource和@Autowired都是做bean的注入时使用,作用相当
@Autowired按byType自动注入;@Qualifier(“bean的名字”)可以和@Autowired配合使用,按名称装配Bean,解决按类型匹配找到多个Bean问题 。
2) @Resource默认按 byName自动注入,@Resource既可以制定byName也可以指定byType注入方式。
3) @Resource装配顺序
(1) 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
(2)如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
(3)如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
(4)如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;