Spring是什么java
是一个开源框架,为了解决企业应用开发的复杂性而建立的,web
是一个轻量级的控制反转和面向切面的容器框架spring
Spring Framework Runtimeexpress
Spring做用编程
容器数组
提供了对多种技术的支持安全
JMS、MQ、UnitTestsession
AOP(事务管理、日志等)app
提供了众多方便应用的辅助类框架
对主流框架提供良好的支持
什么是框架
一般指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品
框架的特色
半成品、封装了特定的处理流程和控制逻辑、成熟
框架与类库的区别
框架通常是封装了逻辑、高内聚的,类库则是松散的工具组合
框架专一于某一领域,类库则是更通用
IOC
接口及面向接口编程
接口
一、用于沟通的中介物的抽象化
二、实体把本身提供给外界的一种抽象化说明,用以由内部操做分离出外部沟通方法,使其能被修改而不影响外界其余实体与其交互方式
三、对应Java接口即声明,声明了哪些方法是对外公开提供的
四、在Java8中,接口能够拥有方法体
面向接口编程
一、结构设计中,分清层次及调用关系,每层只向外(上层)提供一组功能接口,各层间仅依赖接口而非实现类
二、接口实现的变更不影响各层间的调用,这一点在公共服务中尤其重要
三、“面向接口编程”中的“接口”是用于隐藏具体实现和实现多态的组件
什么是IOC
IOC:控制反转,控制权的转移,应用程序自己并不负责依赖对象的建立和维护,而是由外部容器负责建立和维护
DI是其一种实现方式
目的:建立对象而且组装对象之间的关系
Spring的bean配置
xml、注解
Bean容器初始化
基础:两个bao
org.springframework.beans
org.springframework.context
BeanFactory提供配置结构和基本功能,加载并初始化Beam
ApplicationContext保存了Bean对象并在Spring中被普遍使用
方式:ApplicationContext
本地文件
Classpath
Web应用中依赖servlet或Listener
Spring注入
是指在启动Spring容器加载bean配置的时候,完成对变量的赋值行为
经常使用的两种注入方式
设置注入
构造注入
Spring bean装配之Bean的配置项及做用域
bean的配置项
id:惟一标示
class:实例化类
scope:做用域
Constructor arguments:构造器参数
properties:属性
Autowiring mode:自动装配模式
lazy-intialization mode:懒加载模式
Initialization/destruction method:初始化和销毁
bean的做用域
singletion(默认模式):单例,指在一个bean容器中只存在一个
prototype:每次请求建立新的实例,destroy方式不生效
request:每次htto请求建立一个实例且仅在当前request有效
session:与request类似,在当前session内有效
global session:基于portlet的web中有效
bean的生命周期
定义:经过xml,annotation
初始化:
实现org.springframework.beans.factory.InitializingBean接口,实现afterPropertiesSet方法
配置init-method
销毁
实现org.springframework.beans.factory.DisposableBean接口,覆盖destroy方法
配置destroy-method
配置全局默认初始化、销毁方法
注当三种方式同时使用时,默认的配置不生效,实现接口优先于配置
Aware
Spring中提供了一些以Aware结尾的接口实现了Aware接口的bean在被初始化以后,能够获取相应资源
经过Aware接口,能够对Spring相应资源进行造做
为对Spring进行简单的扩展提供了方便的入口
bean的自动装配
No:不作任何操做
byname:根据属性名自动装配,此选项将检查容器并根据名字查找与属性彻底一致的bean,并将其与属性自动装配
bytype:若是容器中存在一个与指定属性类型相同的bean,那么将于该属性自动装配,若是存在多个该类型bean,那么抛出异常,并指出不能使用byType方式进行自动装配,若是没有找到相匹配的bean,则什么事都不发生
Constructor:与byType方式相似,不一样之处在于它应用于构造参数,若是容器中没有找到与构造参数类型一致的bean,那么抛出异常
Resources&
针对资源文件的统一接口
Resources
UrlResources:URL对应的资源,根据一个URL地址便可构建
ClassPathResources:获取类路径下的资源文件
FileSystemResources:获取文件系统里面的资源
ServlrtContextResources:ServletContext封装的资源,用于访问ServletContext环境下的资源
InputStreamResource:针对输入流封装的资源
ByteArrayResource:针对于字节数组封装的资源
ResourceLoader
对Resources加载,全部的ApplicationConeext都实现了Resources
bean的定义及做用域的注解实现
Classpath扫描与组件管理
类的自动检测与注册Bean
Spring能够自动检测类并注册Bean到ApplicationContext
<context:annotation-config/>
<context:component-sca base-packge="" />包含<context:annotation-config/>功能
<context:include-filter type="" expression=""/>
<context:exclude-filter type="" expression=""/>
可使用use-default-filters = “false”禁用自动发现与注册
type有:annotation、assignable、aspectj、regex、custom
定义一个bean
扫描过程当中组件被自动检测,那么Bean名称是由BeanNameGenerator生成的(@Component、@Respository、@Service、@Controller都会有name属性用于显示设置Bean Name)
@Scop 指定做用域,也能够自定义scop策略
@Component
@Respository
@Service
@Controller
@Required:
适用于setter方法
这个注解仅仅表示,受影响的bean属性必须在配置时被填充,经过在bean定义或经过自动装配一个明确的属性值
@Autowired
能够用于setter方法
能够用于构造器或成员变量
每一个类只能有一个构造器被标记为required=true
@Qualifier
按类型自动装配可能多个bean实例的状况,可使用此注解缩小范围(或指定惟一),也能够用指定单独的构造器参数或方法参数
可用于注解集合类型变量
@Resource:至关于 @Autowired + @Resource ,适用于成员变量、只有一个参数的setter方法
基于java容器的注解
@Bean标识一个用于配置和初始化一个由SpringIoC容器管理的新对象的方法,相似于XML配置文件的<bean>,默认是单例的
@Configration:标记为一个配置类
@ImportResource:引入资源文件
@Value:读取配置文件中的值
基于泛型的自动装配
Spring对JSR支持的说明
@Resource
@PostConstruct:初始化回调
@PreDestroy:销毁回调
注:只有CommonAnnotationBeanPostProcessor是Spring的ApplicationContext中注册的
JSR330标准注解
须要依赖javax.inject包
@Inject:等效与@Autowired
@Named若是想使用特定名称进行依赖注入,与Component等效
AOP
意为面向切面编程,经过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术
主要的功能:日志记录,性能统计,安全控制,事务处理,异常处理等
切面:横切与各个功能之上的
实现方式
预编译:AspectJ
运行期动态代理(JDK、CGLIB):SpringAOP、JbossAOP
相关概念
Advice的类型
Spring框架中AOP的用途
提供了声明式的企业服务,特别是EJB的替代服务的声明
容许用户定制本身的方面,以完成OOP与AOP的互补使用
Spring的AOP实现
纯java实现,无需特殊的编译过程,不须要控制类加载器层次
目前只支持方法执行链接点
不是为了提供最完整的AOP,而是侧重于一种AOP实现和Spring IoC容器之间的整合,用于帮助解决企业应用中的常见问题
Spring AOP不会与AspectJ竞争,从而提供全面的AOP解决方案
有接口和无接口的SpringAOP实现区别
Spring AOP默认使用标准的JavaSE动态代理做为AOP代理,这使得任何接口均可以被代理
Spring AOP中也可使用CGLIB代理
Schema-based AOP
Spring全部的切面和通知都必须放在<aop:config>内(能够配置包含多个<aop:config>元素),每一个<aop:config>能够包含pointcut、dvisor和aspect
注:必须按照这个顺序进行声明
<aop:config>大量使用了Spring代理的机制
pointcut
execution(public * *(..)) 切入点为执行全部public方法时
execution(* set*(..)) 切入点为执行全部set开始的方法时
execution(* com.**.*.*(..)) 切入点为某个类中的全部方法时
execution(* com..(..)) 切入点为执行某个包下的全部方法时
exection(* com...(..)) 切入点为执行某个包及其子包下的全部方法时
within(com.*)(only in Spring AOP)
within(com..*)(only in Spring AOP)
within用于匹配指定类型内的方法执行
this(com.fg.TestServer)(only in Spring AOP)this用于匹配当前AOP代理对象类型的执行方法
advice
Before advice
After returning advice
After throwing advice
使用throwing属性来指定可被传递的异常的参数名称
After(finally)advice
Around advice:通知方法的第一个参数必须是ProceedingJoinPoint类型
Advice parameters
Introductions
简介容许一个切面声明一个实现指定接口的通知对象,而且提供了一个接口实现类来表明这些对象
由<aop:aspect>中的<aop:declare-parents>元素声明该元素用于声明所匹配的类型拥有一个新的parent
advisors
就像一个小的自包含的方面,只有一个advice
切面自身经过一个bean表示,而且必须实现某个advice接口,同时,advisor也能够很好的利用AspectJ的切入点表达式
大多数会与transaction adcice配合使用
可使用order属性定义顺序
Spring AOP API
Pointcut
实现之一:NameMatchMethodPintcut,根据方法名进行匹配
成员变量:mappedNames,匹配的方法名集合
ProxyFactoryBean