1.4 spring八股文学习
- spring的特性
IOC AOP 事务管理 mvc - 什么是spring mvc
m就是模型,V就是视图,然后C就是控制器
v就是这个html等等,然后c就是一个控制器,m model层包含这个service和dao - 什么是IOC
就是控制反转,通过控制反转来生成对象,而不是传统的new一个对象,由spring 控制
控制:创建,初始化销毁,由原来的程序员控制编程了IOC容器控制了 - 什么是依赖注入
就是我们不再在类的内部创建对象new一个对象,而是说在外部建立一个对象之后由这个自动注入或者是构造器注入的方式注入 - 什么是基于AOP编程
AOP就是可以把一些公共的业务操作,比如记录日志,或者获取程序运行时间等等封装起来,然后可以将实际的业务逻辑通过切入点表达式捕获,然后再利用joinpoint.proceed运行.这样就可以非侵入式的将原来的代码拓展。
jointpoint 就是可以执行的原始方法
advice就是提取出来的共用逻辑
point cut 匹配连接点的条件
以下是一个AOP的简单例子
这是注解
package com.zy.aopdemo.anotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MYLog
{
}
这是切面类
package com.zy.aopdemo.utils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.HashMap;
@Aspect
@Component
public class logAspect {
@Around("@annotation(com.zy.aopdemo.anotation.MYLog)")
public void logAspect(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("这是一个记录日志的切面");
HashMap<String, String> map = new HashMap<>();
//记录返回结果
Object result = joinPoint.proceed();
String resultString = result.toString();
map.put("返回结果",resultString);
//记录方法名字
String name = joinPoint.getSignature().getName();
map.put("name",name);
//记录方法参数
Object[] args1 = joinPoint.getArgs();
String args1String = Arrays.toString(args1);
map.put("args",args1String);
System.out.println(map);
System.out.println("这是tarhet后面");
}
}