zoukankan      html  css  js  c++  java
  • Spring学习(二)

    1、 AOP的思想(如何实现),AOP在哪些地方使用? 相关术语有哪些?

    AOP是面向切面编程,它是一种编程思想,采取横向抽取机制,取代了传统纵向继承体系重复性代码的方式

    应用场景有:

    记录日志

    监控方法运行时间(监控性能)

    权限控制

    缓存优化(第一次调用查询数据库,将查询结果放入内存对象;第二次调用,直接从内存对象返回,不需要查询数据库)

    事务管理(调用方法前开启事务,调用方法后提交或者回滚、关闭事务)

    AOP的相关术语

    Aspect(切面): 是通知和切入点的结合,通知和切入点共同定义了关于切面的全部内容---它的功能、在何时和何地完成其功能

    joinpoint(连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点.

    Pointcut(切入点):所谓切入点是指我们要对哪些joinpoint进行拦截的定义.

    通知定义了切面的”什么”和”何时”,切入点就定义了”何地”.

    Advice(通知):所谓通知是指拦截到joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)

    Target(目标对象):代理的目标对象

    Weaving(织入):是指把切面应用到目标对象来创建新的代理对象的过程.切面在指定的连接点织入到目标对象

    Introduction(引入):在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field.

    2、 aop的原理(动态代理:jdk,cglib)

    面试题:动态代理和静态代理的区别?

    动态代理:在虚拟机内部运行的时候,动态生成代理类,并不是真正存在的类,一般的格式是:Proxy$$

    静态代理:实际存在代理类(例如:struts2Action的代理类是ActionProxy)

    (扩展:ActionProxy在struts框架中发挥着非常重要的作用,它是action和xwork中间的一层)

    JDK动态代理:针对目标对象的接口进行代理,动态生成接口的实现类!(必须要有接口)

    三种方式:

    方案一:在内部实现new InvocationHandler(),指定匿名内部类

    方案二:传递内部类的对象,指定内部类实现InvocationHandler

    方案三:直接使用调用类作为接口实现类,实现InvocationHandler接口

    JDK动态代理的缺点:只能面向接口代理,不能直接对目标类进行dialing,如果没有接口,则不能使用JDK代理

    CgLib动态代理

    Cglib的引入为了解决类的直接代理问题(生成代理子类),不需要接口也可以代理 !

    两者的区别:

    l Jdk代理:基于接口的代理,一定是基于接口,会生成目标对象的接口类型的子对象。

    l Cglib代理:基于类的代理,不需要基于接口,会生成目标对象类型的子对象。

    3、 传统Spring AOP编程

    4、 AspectJ AOP 编程 (XML或者注解 重点掌握一套 )

    问题:advice(通知增强)、 advisor(传统aop切面配置标签) 、aspect(aspectj的aop切面配置的标签) 、aspectj(可以进行aop的第三方的开源框架) 区别 ?

    Advice 通知 ,增强代码(前置、后置、环绕、异常抛出、引介通知)

    Advisor 传统SpringAOP切面,只包含一个切入点和一个通知

    Aspect AspectJ定义切面 ,可以包含多个切入点和多个通知

    AspectJ 第三方AOP框架

    5、@Aspectj配置切面编程

    在类上添加@Aspectj注解,表示这是一个切面类,并将切面类交给spring管理

    @AspectJ提供不同的通知类型,有以下几种:

    @Before 前置通知,相当于BeforeAdvice

    @AfterReturning 后置通知,相当于AfterReturningAdvice

    @Around 环绕通知,相当于MethodInterceptor

    @AfterThrowing抛出通知,相当于ThrowAdvice

    @After 最终final通知,不管是否异常,该通知都会执行

    @DeclareParents 引介通知,相当于IntroductionInterceptor (不要求掌握)

    6、 数据源配置、JNDI配置

    7、 外部属性文件 (context:placehoder)

    8、 JdbcTemplate 实现 CURD

  • 相关阅读:
    Python 从零学起(纯基础) 笔记 之 collection系列
    ARM学习 之 如何在向内核写入系统调用
    idea的git使用案例
    idea使用git的pull命令报错1
    String、StringBuilder以及StringBuffer
    HashMap实现原理及源码分析
    logback使用注意点1
    创建zookeeper集群
    disconf安装问题
    linux更换jdk版本
  • 原文地址:https://www.cnblogs.com/lizhaowen/p/6057020.html
Copyright © 2011-2022 走看看