SPING 零碎

OOP 与 AOP 的区别

面向目标不同:简单来说 OOP 是面向名词领域,AOP 面向动词领域。
思想结构不同:OOP 以「继承」关系为主线,我们称之为纵向,AOP 是横向结构。
注重方面不同:OOP 注重业务逻辑单元的划分,AOP 偏重业务处理过程中的某个步骤或阶段。

AOP:面向切面编程,通过预编译方

式和运行期动态代理实现程序功能的统一维护的一种技术。

AOP中的相关概念

  • Aspect(切面): Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。

  • Joint point(连接点):表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point。

  • Pointcut(切点):表示一组 joint point,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。

  • Advice(增强):Advice 定义了在 Pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和 around 来区别是在每个 joint point 之前、之后还是代替执行的代码。

  • Target(目标对象):织入 Advice 的目标对象.。

  • Weaving(织入):将 Aspect 和其他对象连接起来, 并创建 Adviced object 的过程。

@Aspect


  • proxy-target-class属性值决定是基于接口的还是基于类的代理被创建。为false或者省略这个属性,则标准的JDK 基于接口的代理将起作用。

  • JoinPoint
    – org.aspectj.lang.JoinPoint 接口表示目标类连接点对象,它定义这些主要方法。
    方法 说明
    – Object[] getArgs() 获取连接点方法运行时的入参列表。
    – Signature getSignature() 获取连接点的方法签名对象。
    – Object getTarget() 获取连接点所在的目标对象。
    – Object getThis() 获取代理对象。

  • ProceedingJoinPoint
    – org.aspectj.lang.ProceedingJoinPoint 继承了 JoinPoint 接口,它新增了两个方法(它们用于执行连接点方法)。
    方法 说明
    – Object proceed() throws Throwable 通过反射执行目标对象连接点处的方法。
    – Object proceed(Object[] var1) throws Throwable 使用新的入参(替换掉原来的入参),通过反射执行目标对象连接点处的方法。

  • 切入点表达式 execution (* com.sample.service.impl….(…))
    – execution()是最常用的切点函数,其语法如下所示:
    整个表达式可以分为五个部分:
    1、execution(): 表达式主体。
    2、第一个*号:表示返回类型,号表示所有的类型。
    3、包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包,com.sample.service.impl包、子孙包下所有类的方法。
    4、第二个
    号:表示类名,号表示所有的类。
    5、
    (…):最后这个星号表示方法名,*号表示所有的方法,后面括弧里面表示方法的参数,两个句点表示任何参数。

日志的级别:

log4j规定了默认的几个级别:trace 级别之间是包含的关系,意思是如果你设置日志级别是trace,则大于等于这个级别的日志都会输出。

泛型:

把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型,参数化类型:
  • 类型通配符 ?
    当我们使用?号通配符的时候:就只能调对象与类型无关的方法,不能调用对象与类型有关的方法。

  • 通配符上限
    这里的限定使用关键字extends ,实际T的类型Collection可以是实现Collection接口的类也可以是继承了Collection接口, extends只是起一个限定作用,而非继承的意义。

  • 通配符下限
    1

如果参数之间的类型有依赖关系,或者返回值是与参数之间有依赖关系的。那么就使用泛型方法

如果没有依赖关系的,就使用通配符,通配符会灵活一些.

Spring注解@RequestParam和@RequestBody

结论; **无论get还是post @Requestparam 都能接收到url里面的参数但不能接收到requestbody里面的数据 @RequestBody 只能接收body里面的数据,对url上的参数不感冒, 所以说,两个注解接收参数对get/post (可以推测到put delete 等) 没有限定,就是说接收参数和发送方式无关,和参数存在的位置有关,@RequestBody 只接受body区域的数据,而get无法发送body数据(?),, 总之@Requestparam接收url上面的参数,@RequestBody 接收body区域的json参数,json的key值一定要双引号哦(不加双引号,浏览器可以忽略这个错误,但不要依赖浏览器的包容性哦)

你可能感兴趣的:(SPING 零碎)