SSM的概念

SSM
SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。
Spring
  Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。也可以称之为项目中的粘合剂。
  Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地new一个对象,而是让Spring框架帮你来完成这一切。
SpringMVC
  SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架中struts。
mybatis
  mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。
页面发送请求给控制器,控制器调用业务层处理逻辑,逻辑层向持久层发送请求,持久层与数据库交互,后将结果返回给业务层,业务层将处理逻辑发送给控制器,控制器再调用视图展现数据。
SpringMVC的运行原理
整个处理过程从一个HTTP请求开始:
1.Tomcat在启动时加载解析web.xml,找到spring mvc的前端总控制器DispatcherServlet,并且通过DispatcherServlet来加载相关的配置文件信息。
2.DispatcherServlet接收到客户端请求,找到对应HandlerMapping,根据映射规则,找到对应的处理器(Handler)。
3.调用相应处理器中的处理方法,处理该请求后,会返回一个ModelAndView。
4.DispatcherServlet根据得到的ModelAndView中的视图对象,找到一个合适的ViewResolver(视图解析器),根据视图解析器的配置,DispatcherServlet将要显示的数据传给对应的视图,最后显示给用户。
SpringMVC注解
SpringMVC中用到过的注解有@Autowired注解和@Resource注解的作用都是为了进行属性注入,但@Autowired默认是按照类型进行匹配,它是Spring提供的注解,@Resource默认是按照名字进行匹配,它是java提供的注解。@ResponseBody注解将实体类自动转换为指定的json格式。除此之外还有@Controller@Service,@Repository分别在控制层,业务逻辑层和持久层的实现类型添加。最后还有@RequestMapping注解在控制层的方法上添加从而将指定url和方法对应起来。

MVC框架思想
MVC是一种分层架构的思想,主要是将Web项目结构进行分成controller、Model、View三个层次,在初期设计中,MVC也包含了持久层。Controller层作为控制层,主要是响应用户请求,接收并校验用户参数(因为用户有可能通过某种方式跳过页面的js验证,比如直接在地址栏发起请求),调用业务逻辑层,也就是Mode层完成业务操作,最后根据业务处理的结果,完成页面跳转到View层。在Model层中,主要是完成了各种业务逻辑操作。View层主要负责视图展示,通常不应该设计业务操作,View层常用的技术包括:html、jsp等等。

SSM整合的流程
在项目中通过在web.xml配置springMVC的核心控制器DispatcherServlet并加载
Spring-mvc.xml,并且通过配置Spring的监听器contextLoaderListener加载spring-common.xml,之后新建控制层并在类上加入@Controller和@RequestMapping注解,并通过@Resource注入service层,在service的实现类上加入@Service注解并通过@Autowired注入dao层,dao层只有接口并没有实现类,是通过在mybatis中对应的含有sql语句的xml文件中来通过namespace指明要实现的dao层的接口,并使sql语句的id和dao层接口中的方法名一致从而明确调用指定dao层接口时要执行的sql语句。并且在spring-mvc.xml中配置了component-scan对controller进行扫描从而使控制层的注解生效还配置了内部视图解析器从而在控制层进行页面跳转时加上指定的前缀和后缀,在spring-common.xml中配置了dbcp数据库连接池以及sqlSession来加载mapper下所有的xml并对所有的mapper层进行扫描也就是对dao层的扫描,
还通过Aop中的切点表达式对service层进行事务控制,并且对service层进行扫描使其注解生效。

springMVC的理解
我们在项目中通常是这样使用springMVC的,springMVC通常作为控制层,通常我们以前是结合spring ibatis使用的,通常我们首先在web.xml里面通过dispatcherservlet springMVC的前端总控制器来加载springMVC的配置文件,从而融入咱们的springMVC,同时也在web.xml里面通过contextLoadLIstener 来加载spring的相关配置文件把spring融入进来,springMVC充当控制层,所以在使用过程中会建立一个普通的java类,然后通过@controller注解让java类充当控制层,然后我们为了能接收前台请求调用具体的方法,我们会使用@requestMaping注解,从而把具体的请求和方法利用起来,我们接收前台表单传递过来的参数用的是在Controller层方法里面传递的参数从而接收前台表单的信息。在这呢,controller层的返回值有这么几种类型,要么是string对应的是一个具体的页面,当然,这需要配合配置文件里的内容视图解析器来结合使用,从而跳转到一个具体的页面,跳转有2中方式forword跳转和redirect跳转(重定向),之后除了返回string类型之外呢,还可以返回modelAndView类型,他的作用是不仅可以跳转到一个具体的视图页面,而且可以带着数据跳转到前台页面进行展示,在这除了返回string和ModelAndView,如果是ajax的话,我们可以返回void类型,然后我们用自己封装的outJson方法可以将json传到前台,还可以结合springMVC里的@responbody注解但是@responbody也是需要在配置文件里面做相关的配置,responbady将实体类转换为json格式的过程中用的是jackJson这个第三方工具类,我们除了这些注解意外,还记得当初在做springMVC上传的时候,用到了一个@requestParam这个注解吗,同样在配置文件里要配置和上传相关的一些类,还有一些信息,从而使springMVC进行上传。再者还记得在项目中用的这样的一个注解@patvalue。它的作用就是获取路径里面的变量信息来充当参数进行查询就是咱们通过${product.id}.jhtml。这样通过路径里面来获取id的唯一编号从而来获取相关的信息,这是我们控制层目前的注解,当然我们控制层因为要注入service层,我们不会用到@resouse或者@autowired,就我所知@resouce它是默认按照名字进行注入的,然后当找不到的情况下。他会自动转换为按bytype进行注入,但是我们在项目中,通常会强制限制他用byName的方式进行注入,我们这样做就是在他后面再加上name等于我们想要访问的bean的id从而让他强制按照byName来诸如。
@autowired他默认按照bytype注入,也可以结合@qualifier按照我们指定的明智进行相关注入,这个@resource 是java提供的一个注解,不需要引用第三方的包,而@autowired是spring框架里面提供的一个包,这是控制层,通常我们在service层的实现类上加上@service的注解,并且为了注入的时候方便我们还会在@service里面写上一个name值,给他指定名字,dao层因为我们使用的是ssi框架,dao层继承sqlMapClientDaoSupport,并且在上面加@Repository注解,您也知道,dao层要和数据库进行交互,如果用ibatis的话,他的核心类是sqlMapClient ,我们是在配置文件中进行配置的,并且我们配置文件的上面加一个好像叫做default autowired byName让他根据名字自动把sqlMapClient注入到dao层的实现类中,从而能够跟咱们的数据库进行交互,这就是我们在项目中是怎么使用springMVC的,包括spring和ibatis的一个整合的一个过程,其他的也没有什么,这就是我哦对他的一个认识。

Spring框架
我认为spring就是一个框架的集成器,通常使用spring来管理action层和DAO层。Spring本身有很多的组件,比如:MVC、IOC、AOP、DaoSupport等等。IOC本身也就是一个容器,它管理了所有的bean和bean之间的依赖关系。IOC也叫作控制反转,核心是BeanFactory。也就意味着IOC是基于工厂模式设计的,同时这个工厂生产的bean默认是单例的。如果想修改单例变成多实例,则需要修改bean的scope属性,值是prototype。在没有使用IOC以前,程序员需要自己在对应的类中new相关依赖的对象。比如UserAction依赖于UserService完成业务操作,而UserService又依赖于UserDAO完成数据库操作。所以需要在action中new servcie,在service中new DAO。这样的方式,是由程序员来管理了对象的生命周期和他们之间的依赖关系,耦合度很高,不利于程序的拓展。所以通过IOC来管理bean和依赖关系,可以解耦合。我们将所有的action、service和dao等类定义成IOC的一个bean组件,此时类的实例化就交给了IOC的beanFactory,由工厂来负责实例化bean的对象。IOC有三种注入方式,属性注入、构造器注入和接口注入。接口注入只是spring提出的设计,并没有具体的实现,所以常用的注入方式是属性注入。属性注入就是在bean的标签中,配置property标签设定注入其他的bean。要求注入的bean在被注入的bean中要存在一个全局的私有变量,并提供set方法。这样就可以实现了依赖关系的注入。如果需要很多的bean,则直接注入就可以。如此操作会导致bean标签的配置比较冗余复杂,所以spring提供了autowried的自动装配方式,可以byName也可以byType。后续的版本中,spring还提供了annotation的方式,不需要再去定义多余的bean标签,而是直接在对应的类上面声明注解就可以了。常用的注解有:@controller、@Service、@Repository、@Component、@AutoWried、@Resource等。除了IOC以外,项目中通常通过AOP来实现事务控制。AOP就是面向切面编程,一般事务我们会控制在service层,因为一个service有可能会调用到多个DAO层的方法,所以只有当一个service方法执行成功后,再提交或者回滚事务。具体的配置方式是:在applicationContext.xml中,配置aop:config标签,指定事务控制在service层。除此还需要配置事务的管理类transactionManager,将这个transactionManager指定给事务管理的bean,并且配置事务的传播特性、隔离级别、回滚策略以及只读事务read-only等等。Spring默认的传播特性是如果当前上下文中存在事务则支持当前事务,如果没有事务,则开启一个新的事务。还有另外一个传播特性是在项目中经常用的,REQUIRES_NEW这个配置,这个属性指的是总是开启一个新的事务,如果当前上下文中存在一个事务,则将当前的事务挂起后开启新的事务。比如说:在一个本来是只读事务的操作中,想加入写操作的时候,就使用REQUIRES_NEW。关于事务的隔离级别,一般使用默认的配置提交读。也就是说,事务提交以后,才能访问这条数据。除了事务控制以外,我们通常还可以使用AOP去完成一些特殊操作,比如日志控制、安全校验等等。这么做的目的就是将功能操作的代码从实际的业务逻辑操作出分离出来。实现的方式是通过代理模式,真正完成操作的不是实际的业务对象而是代理对象。代理模式有静态代理和动态代理,实现的方案也有两种,一种是基于JDK的Proxy代理类,另外一种则通过CGLIB来实现。实现AOP的方式,主要是在applicationContext中定义一个AOP处理类,这就是一个普通的bean,在类中定义要执行的方法。然后去配置一个aop:config标签,在标签中定义aop:aspect切面,在切面中关联刚才定义好的处理类bean。然后在切面标签中配置aop:pointcut切入点,切入点就指的是在哪个类的哪个方法上加入代理事务,然后配置通知模型。AOP的通知模型中包含:前置通知、后置通知、最终通知、异常通知、环绕通知。这几个通知模型表示在方法执行以前、执行以后、最终执行、当遇到异常时执行以及前后都执行。在执行的AOP切面方法中,可以通过JoinPoint连接点来获得当前被代理的对象以及被代理对象要执行的方法和方法的参数。除了IOC和AOP,我们经常还会使用到spring的DaoSupport。主要是spring提供了对hibernate和myBatis等持久型框架的接口。比如HibernateDaoSupport,和sqlSessionDaoSupport。如果DAO继承了HibernateDaoSupport,则需要在对应的bean中注入sessionFactory。而sessionFactory是通过IOC加载的。
mybatis原理:
通过SqlSessionFactoryBuilder从mybatis-config.xml配置文件中构建出SqlSessionFactory。
SqlSessionFactory开启一个SqlSession,通过SqlSession实例获得Mapper对象并且运行Mapper映射的Sql语句。
完成数据库的CRUD操作和事务提交,关闭SqlSession

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值