Spring、SpringMVC
Spring的系统架构
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中可以理解是方法的执行
切入点:匹配连接点的式子,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中通常指数据层方法或者业务层方法
事物传播行为
-
如果事物管理员有事物,那么协调员就加入,如果管理员没有事物,那么协调员新建事物
-
如果管理员有事物,协调员新建事物,如果管理员没有事物,那么协调员新建事物
-
如果管理员有事物,那么协调员加入,如果管理员没有事物,那么协议员什么都不做
-
不管管理员有没有事物,协调员什么都不做
-
如果管理员有事物,那么协调员加入,如果管理员没有事物,那么协调员报错
-
如果管理员有事物,那么协调员爆粗,如果管理员没有事物,那么协调员什么都不做
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的访问进行增强