zoukankan      html  css  js  c++  java
  • Spring5 Framework(IOC+AOP+整合Mybatis事务)

    Spring Framework官网文档:

       https://spring.io/projects/spring-framework

    下载地址:https://repo.spring.io/release/org/springframework/spring/


    优点:

      


     IOC/AOP的学习重在学习注解开发,xml配置的方法 简单看下即可。


     IoC控制反转(实现方法是依赖注入


     Inversion of Control

    IOC容器:用于解耦,方便代码的修改,而不会由于改一个地方导致很多相关的地方都要改。

    参考博客,便于理解IOC思想:https://segmentfault.com/a/1190000019280079


    例子:

    serviceImpl:

       使用IOC前:

       使用IOC之后:

    依靠set动态注入的对象,来进行userDao的初始化;

    有IOC后,不用再new对象,交给Spring来创建对象;

    Test.java里:

     增加多个impl之后,后面调取处选择即可


     Hello Spring

     class(entity):

     

     beans.xml(类在里面注册):

     

     main函数测试:


    Spring配置(beans.xml)

    • beans (上方)
    • alias  别名,类似数据库的as
    • import (多人开发时产生多个beans.xml,运行时用总的就可以了)

    依赖注入 DI

      构造器注入(见上方代码)  c命名空间注入

      Set方式注入(重点)    p命名空间注入

         bean对象的创建+属性的注入==》依赖容器

    bean.xml手动装配:(老方法)

     

     


    @Scope作用域(bean)

      singleton单例【Spring默认】(对象全局唯一,所有创建的bean共享)

      prototype原型(每一个bean都会产生自己的对象)(多线程可用

      对象的hashcode不一样

      request 在请求中创建&生效;session在会话中活着;application在全局中活着;


     Bean 隐式装配

      Spring会在上下文中自动寻找,并自动给bean装配属性

      


    Spring注解开发 

     做法:

    1.预先配置(xml中配置是旧方法,新方法完全用config.java+@Configuration(含@Conponent)+@Bean来):

      1)在beans.xml里面导入约束:(springframework)

       

       2)beans.xml配置注解的支持:

      

       指定要扫描的包:

       

      3)要使用注解开发,必须保证aop的maven包导入了:

       ?

    2.然后直接在domain属性上使用、或者在set方法上使用:

      1)@Autowired自动装配Bean

    @Autowired
    private Dog dog;

      

       2)@Component 说明Spring自动扫描整个包的bean

       @Value 用于注入属性的值

       

      3)@Conponent的几个功能一样的注解:

      

      上面三个是和component都是一样的(IOC),表示某个 注册到Spring容器中装备Bean。

      表明有IOC:

      

    JavaConfig

    xml中配置是旧方法,新方法完全用config.java+@Configuration(含@Conponent)+@Bean来:

    实体类包括其中的注解不变,

    config.xml替换为config.java:


     AOP


    代理模式:

    • 静态代理
    • 动态代理(重点)

    动态代理

    动态代理(基于反射),代理的类是动态生成的,不是直接写好的

    分为:基于接口 /基于类 的动态代理

    需要了解2个类:

      Proxy:是一个静态方法,用于创建动态代理类和实例

      InvocationHandler 调用处理程序

     准备面试的时候,再把“动态代理”仔细看下


    AOP名词概念

    https://blog.csdn.net/sggtgfs/article/details/85338011

    横切关注点

      跨越多个模块的方法或功能,与我们的业务逻辑无关。

      如:日志、安全、缓存、事务。。。

    切面 Aspect:是一个

    Advice 通知 切面中要完成的 方法

    切入点 PointCut切面方法执行的地点

    代理 proxy:目标对象被通知后创建的对象

     使用Spring AOP需要 织入包 aspectjweaver


     配置方式 实现AOP:

     在?applicationContext.xml里:

    说明:这里的aspect ref后面跟的是,横切关注点(例如log/secure/cache/transaction)

    <aop:config>
       可以多个切面:
    <aop:aspect ref=...> 此处写多个切入点: <aop:pointcut id="point3" expression="execution(* com.kuang.service.Impl.*(..))" 此处写多个Action(方法对应到切入点): <aop:before method="before" pointcut-ref="point3"> <aop:after method="after" pointcut-ref="point3"> <aop:b...> </aop:aspect ref=...>

    Aspect切面里分层:

      一层是切入点PointCut(执行点)

      一层是Advice(执行方法)

     

     


     注解实现AOP

    注解实现的劣势是:没有像xml注册那样使用 "切入点+Advice"两层结构,导致切入点不能复用,可能会多次书写同样的切入点,导致不易管理;

    但是注解真的很方便:在写Advice方法的时候就直接写上对应的切入点了。


    Spring整合Mybatis事务


    终极简化版:

    SqlSessionDaoSupport

     

     调用getSqlSession()得到SqlSessionTemplate


    Spring声明式事务(交给容器管理事务,不会改变原有代码)

    (事务的作用是保持数据ACID特性;要么都成功,要么都失败;) 


    关键是xml配置(之前已经写好了CRUD)

    1.transactionManager

      

    2.Advice(执行方法):

       

         propagation = REQUIRED:如果当前没有事务,就新建一个事务;如果有事务就用当前事务;

    3.PointCut(切入点):

        


  • 相关阅读:
    单调栈
    单调队列
    线段树
    树状数组
    KMP模式匹配
    二分图最大匹配
    celery发送短信接口
    celery配置与基本使用
    celery介绍
    短信验证接口
  • 原文地址:https://www.cnblogs.com/qyf2199/p/14210802.html
Copyright © 2011-2022 走看看