ioc/di 控制反转/依赖注入
aop 面向切面
Spring是轻量级开发框架 网站:https://spring.io
1)轻量 -1M
2)控制反转 -IOC(依赖注入)
3)面向切面编程 -AOP
4)容器(创建管理bean)
5)框架
优点:
1.方便解耦,不强制关联,简化开发
2.AOP的支持
3.声明式事务
4.方便程序测试
5.集成各种优秀框架 Redis MongoDB(nosql) hibernate mybatis activemq...
6.降低java ee API使用难度
7.Spring源码
优势:
1.低侵入性
2.依赖注入
3.aop方便事务配置,动态为类添加方法
4.Spring可是全有或者全无的程序
5.一站式框架:每层都有自己的实现
webservice(SOA 跨语言 服务端 --xml--客户端 )
ioc:控制反转 (创建对象和给对象设置属性)
加载配置的方式:
1.BeanFactory(IOC容器 底层 不推荐) 采用延迟加载 ,只有在第一次调用时才会运行,验证是否出现错误
2.ApplicationContext(应用程序上下文 推荐)
读取Spring上下文方式:
1.ClassPathXmlApplicationContext("ApplicationContext.xml")
2.FileSystemXmlApplicationContext("classpath:ApplicationContext.xml")
依赖注入:
1.属性的set方法
2.构造方法
3.接口
Spring支持前两种
注入属性:
普通类型
对象类型
null类型
集合类型:list map set
bean的作用域 scope
singleton(默认单例)
prototype(多例 有状态bean使用,每次要创建一个新的实例)
request(web有效)
session(web有效)
global session (porlet不常用)
bean的延迟加载
application实现默认将所有singleton bean 提前实例化(也就是依赖注入)
如果 设置lazy-init 设置为true ,实现懒加载
bean的继承: 用parent属性继承公有的属性
AOP面向切面的编程:
一次性解决一类问题
在不修改原有代码的基础上扩展程序(开闭原则)
方式:
1.针对有接口的类,采用jdk动态代理(横向扩展 接口-实现类)
2.针对没有接口的类,采用cglib代理(纵向代理 继承)
Aop关键名词:
Joinpoint(连接点):一个类当中的方法,或者说一个类里的哪些方法是可以被扩展或增强的
Pointcut(切入点):(从哪下手) 类里面有很多方法都可以被扩展或增加,但是我这次要扩展或增加的哪个方法 (原有方法-写的)
Advice(通知/增强):扩展或增强的逻辑(比如我在add方法前加日志,那么这个日志功能就叫通知或增强) (新写了一个方法—写的)
*******通知或增强的类别(时机) (配置的)**
前置增强:有原有方法执行前执行 before
返回后增强:有原有方法执行后执行 after-returning
异常:有原有方法执行产生异常 after-throwing
后置(最终):在后置之后(收尾) after after-returning ----?after
after的执行是在after returning之后,但无论方法是否正常结束, after通知都会被执行
环绕:在方法前和后都可以执行他可以把原方法包起来 他需要拿到原有方法 around
Aspect(切面)(配置实现):把增强应用到切点的过程。
也就是把新写的方法应用到原有方法的过程 (配置的 满足哪些条件的类和方法)
Target:目标对象- 被增强方法所在的类
Waving:织入-把增强应用到目标的过程
Proxy:代理-一个类被aop织入增强后,就会在底层产生一个代理类
如果有接口的类-动态代理
没有接口的类-cglib代理
网友评论