1.同源策略
如果浏览器的地址与Ajax的请求地址 协议名称://域名地址:端口号 如果都相同则满足同源策略.
浏览器可以正常的解析返回值.如果三者之间有一个不同,则违反了同源策略.浏览器不会解析返回值.
2.什么是跨域
由于业务需要,通常A服务器中的数据可能来源于B服务器. 当浏览器通过网址解析页面时,
如果页面内部发起ajax请求.如果浏览器的访问地址与Ajax访问地址不满足同源策略时,则称之为跨域请求.
跨域要素:
- 浏览器
- 解析ajax
- 违反了同源策略
浏览器限制: 即浏览器对跨域行为进行检测和阻止
触发跨域的三要素之一: 即 协议,域名和端口三个条件满足其一
发起的是xhr请求: 即发起的是XMLHttpRequest类型的请求。
3.动态代理分类
-
JDK代理:
要求: 要求目标对象必须实现接口
代理要求: 代理对象也必须实现目标对象的接口
目标对象/代理关系: 目标对象与代理对象兄弟关系. -
CGlib代理
要求: 不管目标对象是否有接口,都可以为其创建代理对象
代理要求: 要求代理对象必须继承目标对象
目标对象/代理关系: 目标对象与代理对象是父子关系
4.动态代理优势:
将公共的部分写到动态代理中,之后其他的业务类调用即可
5.AOP名词解释:
- 连接点: 用户可以被扩展的方法
- 切入点: 用户实际扩展的方法
- 通知: 扩展方法的具体实现
- 切面: 将通知应用到切入点的过程
6.AOP底层
Srping框架的AOP技术底层也是采用的代理技术,代理的方式提供了两种
- 基于JDK的动态代理
必须是面向接口的,只有实现了具体接口的类才能生成代理对象 - 基于CGLIB动态代理
对于没有实现了接口的类,也可以产生代理,产生这个类的子类的方式
Spring的传统AOP中根据类是否实现接口,来采用不同的代理方式
- 如果实现类接口,使用JDK动态代理完成AOP
- 如果没有实现接口,采用CGLIB动态代理完成AOP
7.通知类型(必会)
before: 在目标方法执行之前执行
afterReturning: 在目标方法执行之后返回时执行
afterThrowing: 在目标方法执行之后,抛出异常时执行
after: 无论程序是否执行成功,都要最后执行的通知
around: 在目标方法执行前后 都要执行的通知(完美体现了动态代理模式)
功能最为强大 只有环绕通知可以控制目标方法的执行
环绕通知是处理业务的首选. 可以修改程序的执行轨迹,
另外的四大通知一般用来做程序的监控.(监控系统) 只做记录
8. 切入点表达式:
当程序满足切入点表达式,才能进入切面,执行通知方法.
- bean(“bean的ID”) 根据beanId进行拦截 只能匹配一个
- within(“包名.类名”) 可以使用通配符*? 能匹配多个.
粒度: 上述的切入点表达式 粒度是类级别的. 粗粒度. - execution(返回值类型 包名.类名.方法名(参数列表…))
粒度: 控制的是方法参数级别. 所以粒度较细. 最常用的. - @annotation(包名.注解名) 只拦截注解.
粒度: 注解是一种标记 根据规则标识某个方法/属性/类 细粒度
9.关于通知方法的执行顺序
- 执行around开始
- 执行before
- 执行目标方法
- 执行afterReturning
- 执行afterThrowing
- 执行after
- 执行around通知结束