zoukankan      html  css  js  c++  java
  • SSM框架-----Spring篇

    SSM框架是spring MVC,spring和mabatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,DAO层四层。

    spring MVC:负责请求的转发和视图管理。

    spring        :实现业务对象管理。

    mybatis      :作为数据对象的持久化引擎。

    一.谈谈你对Spring框架的理解

    1.Spring是什么?

        Spring一个开源的,用来简化企业级应用开发的应用开发框架。Spring的核心就是IOC(控制反转)和AOP(面向切面编程)。

      Spring容器:spring框架中的一个核心模块,用来管理对象(包括对象的创建,销毁和初始化等)。它帮助完成类的初始化与装配工作,让开发者从这些底层类的实例化,依赖关系装配类的工作中脱离出来,专注于更有意义的业务逻辑开发工作。

        启动spring容器:

            step1.导3.2.8的包

            step2.配置xml文件+junit包(这个包是为了测试用的)

            step3.读xml文件创建容器

                   

       

         

    Spring如何创建对象?——spring容器依据配置文件创建对象。

    方式一: 无参构造器(或者缺省构造器) 

    step1:为类添加无参构造器(内部有了这个无参构造的类就可以省略这一步) 

    step2:配置文件中添加一个bean元素

    step3:启动创建容器,调用容器的getBean方法就是实例化这个类返回对象<---重要思想!!!!!!!!!!!!!

    Step1:                                                                                                                                              

             

     step2:

                   

    step3:

          

    方式二: 用静态工厂方法创建(了解即可)---解决抽象类

    Calendar c = ac.getBean("cal",Calendar.class);

    方式三: 用实例工厂方法创建(了解即可)---解决抽象类



    Date time = ac.getBean("time",Date.class);

    2.Spring的作用:

      a.简化开发:spring对常用的API都做了一些简化和封装(比如,用spring jdbc访问数据库,就不用考虑如何获取连接和关闭连接)。

      b.解耦:spring帮我们管理对象的依赖关系,这样对象间的耦合度低,方便维护。

      c.集成其他框架:spring可以将其他的框架集成进来。(比如可以将Mybatis等框架集成进来)

     

     

    1.1 ioc是什么?

         IOC——:inversion of control,即“控制反转”,ioc不是一种技术,是一种设计思想,一个重要的面向对象编程的法则。在java开发中,IOC意味着将你设计好的对象交给容器控制,而不是在传统的在你的对象内部直接控制。

      何为“控制”:传统的JAVA SE程序设计,我们是从对象内部通过new创建对象,是程序控制对象的创建,而IOC有一个专门的容器(IOC容器)创建对象,IOC容器控制外部资源的获取(包括对象,文件等)。

      何为“反转”:传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,即“正转”。而“反转”,是由容器来帮我们去创建及注入依赖对象。对象只是被动的接受依赖对象。依赖对象的获取被反转了。

    1.2 ioc有什么用?

       ioc容器能帮我们管理对象的依赖关系,这样对象与对象的耦合度低,方便代码的维护。对于spring框架来说,ioc就是由spring来负责控制对象的生命周期和对象间的关系。

    1.3 DI

      DI——dependenc injection,即“依赖注入”。IOC与DI有什么关系呢?其实它们是同一个概念的不同角度描述。“依赖注入”,相对ioc而言,“依赖注入”明确地描述了“被注入对象”依赖ioc容器配置依赖对象。IOC的一个重点是在系统运行中,动态的向某个对象提供所需要的其他对象,这一点通过DI实现。DI如何实现?这就要引入java 1.3之后的一个重要特征——反射(reflection)。它允许程序在运行的时候动态生成对象、执行对象的方法、改变对象的属性。spring就是通过反射注入的。

    1.4 spring的两种注入方式

     1.4.1. 构造器注入:通过调用的类的构造函数,将接口实现类通过构造函数变量传入。

    构造器注入步骤:

    step1.添加相应构造器:                                                                                                                               

                     

            

    step2:配置文件xml

    xml的启动相当于容器的启动,constructor-arg意思是构造器,相当于写了Manager类的构造方法ref=cp相当于Computer类型的对象cp,因为构造方法里面有this.cp=cp;所以就相当与给Manager类里面的cp赋值了(类型必须是匹配的,都是Computer类型)相当于就在xml表里面写了Manager(Computer cp){},xml一启动就调用了

    1.4.2:setter方法注入:是容器通过调用无参构造器或无参static 工厂方法实列化bean之后,调用该bean的setter方法, 即实现了基于setter的依赖注入

      set方法注入步骤:

      step1.为A类添加 IB类型常量并写上setB():                                                                                              

                                                           
                          

                                     

                                                                                                                                                                                       

                                                                                          

     step2.配置文件xml:

    这个name=b相当于写了A类里面的setB方法,ref=c相当于C类型的对象c,因为set方法里面是this.b=b,所以一旦调用set方法就相当于给A类里面的b赋值了


     

    一.使用注解简化配置文件------------------------------------------------

    组件扫描: Spring容器启动之后会检查某个包以及子包下面的所有的类,如果类前面有特定注解(比如@Component),
    则容器会将该类纳入容器进行管理(就相当于配置了一个bean元素)          

    其中init跟destroy的注释@PostConstruct跟@PreDestroy是sun公司的,要导annotation包
    生命周期相关注解:@PostConstruct/@PreDestroy
    延迟加载和作用域相关注解:@Lazy(true)/@Scope("prototype")/@Scope("singleton")
    依赖注入相关注解(就是set注入和构造器注入):@Autowired和@Qualifier("wt") ,@Qualifier如果不加的话,会按照byType的方式来自动装配,就有可能找到多个,建议最好使用该注解,明确指定被注入的bean的id。
    @Resource(name="wt"): 1.只支持set方法的注入. 2.使用name属性指定被注入的bean的id

                      

    STEP1.在类前面加注释,方法前面加注释

    STEP2.配置里面扫描包

    测试结果1 :         

         

    测试结果2:                       

     

    测试结果3:

    Restaurant是set注入, Leader是有参构造方法注入, Manager是@Resource(name="")注入<

                                    

     

                                                                                                                                                                           

                                                                                                                                                                                                                                                            

     测试

    测试结果5:

     测试结果6:

    测试结果7:

     

                                                                                                                                                                          

                                                                                                                                                                       

    2.1 AOP

    2.1.1   Aop是什么?

     AOP——(Aspect-Oriented Programming),即面向切面编程。AOP可以说是OOP的补充和完善,是Spring框架核心功能之一。

    2.1.2   AOP的特点(优势)?

    为了解决当我们需要为分散的对象引入公共行为的时候,如程序中交叉业务逻辑(系统日志,事务处理,系统安全验证,系统数据缓存等等),这是我们应当把它封装成一个切面,注入到目标对象(具体逻辑)中去。可以简化代码开发和效率,能够在不改变原有代码的基础上扩展新的功能实现。

    2.1.3AOP 核心概念、术语

    AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。其相关概念术语如下: 

    切面(aspect): 横切面对象,一般为一个具体类对象(本质就是加了@Aspect注解的类)
    通知(advice):拦截到连接点之后只要执行的方法
    切入点(pointcut):对连接点拦截内容的一种定义
    连接点(joinpoint):程序执行过程中某个特定的点,一般指被拦截到的的方法
    目标对象(target):代理的目标对象。
    通知(Advice):在切面的某个特定连接点上执行的动作,例如before,after等 

    知识点术语强化:
    1) 切面(可以简单理解为要植入的新的业务功能,这个功能交给某个类负责,这个类就是切面)
    2) 通知(可以简单理解为一个业务中的扩展逻辑的若干步骤,例如先做什么(before),再做什么(afterReturn),最后做什么)
    3) 切入点(在原有的哪些业务方法上扩展新的业务,可以将切入点理解为方法的集合)
    4) 连接点(可以简单理解为切入点中的一个具体方法)
    5) 目标对象(需要扩展功能的那个对象,一般为被代理对象)
    6) 代理对象(负责调用切面中的方法为目标对象植入新的功能)


    2.1.4 Spring AOP 的编程实现

    Spring中AOP代理由Spring的IOC容器负责生成、管理。
    其依赖关系也由IOC容器负责管理。
    因此,AOP代理可以直接使用容器中的其它bean实例作为目标,
    这种关系可由IOC容器的依赖注入提供。Spring创建代理的规则为:
    1、默认使用Java动态代理来创建AOP代理,这样就可以为任何接口实例创建代理了
    2、当需要代理的类不是代理接口的时候,Spring会切换为使用CGLIB代理。

    AOP编程其实是很简单的事情,纵观AOP编程,程序员只需要参与三个部分:
    1. 定义普通业务组件(切面)
    2. 定义切入点,一个切入点可能横切多个业务组件
    3. 定义增强处理,增强处理就是在AOP框架为普通业务组件织入的处理动作。
    所以进行AOP编程的关键就是定义切入点和定义增强处理,一旦定义了合适的切入点和增强处理,AOP框架将自动生成AOP代理

    2.1.5 AOP怎么用?

    面向切面@Aspect
    step1. 导入3个Maven jar包,spring-context(里面包含了spring-aop),aspectjrt,aspectjweaver


    step2. 配置spring-aop.xml

    step3.写一个代理类,这个类相当于切面,注解@Aspect@Component,英文意思就是切面,扫描,

    @Order(1)多个切面类时执行顺序注解,数字越小越先执行,在方法前面加你要的功能注解并指向被代理类,称为切入点如:@Before("bean(projectServiceImpl)"),实现类开头字母小写

      @AfterThrowing @AfterReturning @After 分别为目标方法异常后,目标方法正常结束后,目标方法之后, 
      空间想象就是当被代理类进来的时候会先经过代理类这个'横切面'过滤,在被代理类方法运行前后记录日志

       



    step4. 被代理类实质上就是业务层,必须有注解@Service

    step5. 测试的时候getBean("业务层类名开头字母小写",指向业务层实现的那个接口的名字);

         

     

     

    step6. 对面向切面的接入点封装,之后就直接调用,如:@Before("method()")

        @Pointcut("bean(projectServiceImpl)")
        public void method(){}

               

  • 相关阅读:
    vs编译出现 fatal error LNK1281:无法生成 SAFESEH 映像
    $apply()和$digest()——angular
    JS获取URL中参数值
    NeDB——node嵌入式数据库
    VS Code常用插件
    js断点调试
    VS Code 使用Git进行版本控制
    VS Code快捷键
    用户tokenId
    node-webkit-updater——NW.js自动更新
  • 原文地址:https://www.cnblogs.com/mingyun/p/9237718.html
Copyright © 2011-2022 走看看