SpringAOP和MVC拦截器如何实现?

Spring、SpringMVC

Spring的系统架构

SpringAOP和MVC拦截器如何实现?_第1张图片

1.Spring的2大核心概念

1.1 IOC

将创建对象交给spring容器管理,bean实例化的三种方式 1.构造方法 2. 静态工厂 3. 实例工厂(FactorBean)

1.2 Bean的生命周期

1.创建对象 2.执行构造方法 3.执行属性注入(set操作)4.执行bean初始化方法 5. 执行业务操作 6. 销毁bean

2.1 DI

两种方法 setter 和构造器 自动装配 分按类型和按名称

2.AOP

SpringAOP和MVC拦截器如何实现?_第2张图片

连接点:在springAOP中可以理解是方法的执行

切入点:匹配连接点的式子,SpringAop中一个切入点可以只描述一个具体方法,也可以匹配多个方法

通知类:定义通知的类

通知:共性功能

切面:描述通知与切入点的对应关系

@Aspect     // 切面(描述切入点与通知的关系)
@Component
public class SpringAop {
    // 返回值 包名.类名.方法名(参数)
    @Pointcut(value = "execution(* com.liub.spring.*.*SpringAopDemo.update*(..))")  //切入点(在哪个方法执行)
    public void pointcut() {

    }

    @Around("pointcut()")  // 环绕通知
    public Object method(ProceedingJoinPoint pj) throws Throwable {
        System.out.println("方法执行之前打印");
        Integer proceed = (Integer) pj.proceed();// 目标对象
        System.out.println("方法执行之后打印");
        return proceed;
    }
}

// 配置类加上注解 EnableAspectJAutoProxy

3.Spring事物

事物管理员:发起事物方,在spring中通常指代业务层开启事物的方法

事物协调员:加入事物方,在spring中通常指数据层方法或者业务层方法

事物传播行为

SpringAOP和MVC拦截器如何实现?_第3张图片

  1. 如果事物管理员有事物,那么协调员就加入,如果管理员没有事物,那么协调员新建事物

  2. 如果管理员有事物,协调员新建事物,如果管理员没有事物,那么协调员新建事物

  3. 如果管理员有事物,那么协调员加入,如果管理员没有事物,那么协议员什么都不做

  4. 不管管理员有没有事物,协调员什么都不做

  5. 如果管理员有事物,那么协调员加入,如果管理员没有事物,那么协调员报错

  6. 如果管理员有事物,那么协调员爆粗,如果管理员没有事物,那么协调员什么都不做

2.SpringMVC

SpringMVC拦截器实现

@Configuration
public class SpringMvcInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle 拦截方法前执行");
        return false;  // false 后面post和after都不会执行 如果是多个拦截器 pst不会执行
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("after...");
    }
}
@Configuration
public class SpringMvcConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new SpringMvcInterceptor()).addPathPatterns("/*");
    }
}

拦截器和过滤器有什么区别?

过滤器属于Servlet技术,且能对所有访问进行增强。拦截器是MVC技术,仅针对springmvc的访问进行增强

你可能感兴趣的:(spring,java)