常见模块

  • Spring Core
  • Spring AOP
  • Spring Web
  • Spring ORM
  • Spring Test
  • Spring JDBC

    MVC原理

  1. 客户端发起请求,进入DispatcherServlet
  2. DispatcherServlet根据请求信息调用HandlerMapping,解析请求对应的Handler(即Controller控制器)
  3. HandlerAdapter适配器处理请求,执行业务逻辑
  4. 返回ModelAndView对象,Model是返回的数据对象,View是逻辑View
  5. ViewResolver根据逻辑View查找实际的View
  6. 再由DispatcherServletModel传给View
  7. View返回给请求者

    AOP

  • 面向切面编程,减少重复代码、降低模块耦合、可维护性和可拓展性更强
  • 基于动态代理
  • 默认使用JDK Proxy,为实现了接口的对象创建代理对象
  • 当没有实现接口时,使用Cglib生成被代理对象的子类来作为代理(基于ASM修改字节码)
  • Spring AOP是运行时增强,AspectJ是编译时增强
  • SpringAOP基于代理,AspectJ基于字节码操作
  • 常见注解:@Aspect @Pointcut @Around @Before @After

    IOC

  • 控制反转,是一种设计思想

  • 将手动创建对象这一过程,交给Spring管理
  • IOC容器实际上就是个Map,里面存放各种对象
  • 常见注解:@Controller @Service @Repository @Component @Bean

    DI

  • Dependency Injection,依赖注入

  • 相当于IOC的具体实现
  • 常用注解:@Autowired

    用到了哪些设计模式

  • 工厂设计模式:BeanFactoryApplicationContext创建bean对象

  • 代理模式:AOP是代理模式
  • 单例模式:Spring中的Bean模式都是单例
  • 模版方法模式:JdbcTemplateHibernateTemplate
  • 观察者模式:Spring事件驱动模型
  • 适配器模式:DispatcherServlet通过适配器适配Controller

    事务

  • 常见注解:@Transactional

  • 传播行为:REQUIRED,SUPPORTS,MANDATORY,REQUIRES_NEW,NOT_SUPPORTED,NEVER,NESTED

    事务失效的原因

  • 数据库不支持事务

  • 没有被Spring管理,也即没有被加载成Bean
  • 方法不是public,如果一定要用在非public方法上,可以开启AspectJ代理
  • 被异常捕获了
  • 异常类型错误,默认异常是RuntimeException