• spring总结


    1.spring的话(轻量级框架,用户需要什么功能就自己添加相应的功能模块,其中自带的两大核心模块:springaop和springioc)

      spring框架给项目带来的好处:

        1,动态解耦,方便开发

          将对象之间的依赖关系交给spring进行管理,避免代码与代码之间的过度耦合

        2,方便集成各种优秀的框架

        3,支持aop编程

        4,spring是一个模块化的项目,可以根据自己的需要定制功能模块

        5,默认为单例模式创建,节省开销

      

    spring框架下的核心功能模块 

      core(spring的核心容器):Core包是框架的最基础部分,并提供依赖注入(Dependency Injection)管理Bean容器功能,即提供IOC和依赖注入。

      Spring ORM:Spring与所有的主要的ORM映射框架都集成的很好,包括Hibernate、MyBatis等

      Spring AOP(面向切面编程):Spring AOP模块将面向切面编程的功能集成了


      SpringAOP指的是spring中的面向切面编程
      它的核心原理是通过动态代理实现的

      动态代理又分为
        1.jdk自带的动态代理(默认的):通过反射来接收被代理的类,要求被代理的类必须实现一个接口,生成的代理对象的方法调用都会委托到Invocation.invoke()方法中(当我们调用被代理类的方法时,这个调用都是传送进invoke方法中调用,在通过Proxy类反射出代理类对象
        2.cglib代理(用于没有实现接口的类,通过生成子类,在子类中加入需求,得到代理类)

      aop编程的具体过程为:
        将需求变成切面类(aspect),委托类中的方法变成连接点(joinpoint)
        (通知)拦截器(advice)控制织入(wave)到方法执行的位置
        增强器(adivsor用来删选哪些方法为连接点,默认委托类所有的方法为连接点),一组连接点即为切入点(JoinPoint)

      SpringIoc核心是控制反转和依赖注入,控制反转将对象的依赖关系交给ioc容器,实现了对象的解耦合,通过xml文件的配置相应的bean,spring容器进行管理
    而依赖注入,则有三种注入方式(这只是单纯的手动装配):
      1.构造方法注入
      2.注解注入   使用autowired注解配置
      3.set方法注入

          <!--property 对于所有用set方式来注入的必须使用该标签-->
               <!--value 是对于基本类型,都用value(标签/属性)来注入,可以实现自动的数据类型转换-->

      4.静态工厂的方法注入

          让spring来生成和管理静态工厂(类的静态方法)产生的对象

          public class DaoFactory { //静态工厂
            public static final FactoryDao getStaticFactoryDaoImpl(){
              return new StaticFacotryDaoImpl();
            }
          }
          public class SpringAction {
            private FactoryDao staticFactoryDao; //注入对象
            //注入对象的 set 方法
            public void setStaticFactoryDao(FactoryDao staticFactoryDao) {
              this.staticFactoryDao = staticFactoryDao;
            }
          }
          //factory-method="getStaticFactoryDaoImpl"指定调用哪个工厂方法
          <bean name="springAction" class=" SpringAction" >
            <!--使用静态工厂的方法注入对象,对应下面的配置文件-->
            <property name="staticFactoryDao" ref="staticFactoryDao"></property>
          </bean>
          <!--此处获取对象的方式是从工厂类中获取静态方法-->
          <bean name="staticFactoryDao" class="DaoFactory"
            factory-method="getStaticFactoryDaoImpl"></bean>

      5.实例工厂的方法注入

       实例工厂的意思是获取对象实例的方法不是静态的,所以你需要首先 先管理 工厂类,在使用工厂类生成的对象

      <bean name="springAction" class="SpringAction">
        <!--使用实例工厂的方法注入对象,对应下面的配置文件-->
        <property name="factoryDao" ref="factoryDao"></property>
      </bean>
        <!--此处获取对象的方式是从工厂类中获取实例方法-->
      <bean name="daoFactory" class="com.DaoFactory"></bean>
      <bean name="factoryDao" factory-bean="daoFactory"   factory-method="getFactoryDaoImpl"></bean>

      spring提供了bean单例模式开发,但不保证是线程安全的
      spring用ThreadLocal处理线程并发
      Spring五种自动装配模式的区别
        1.默认配置:需自行用标签设置依赖关系(ref标签设置)
        2.byName:根据bean的name来查询一个匹配的bean(id属性)
        3.byType:根据bean的类型来查询一个匹配的bean(class属性)
        4.constructor:根据bean的构造器来查询一个匹配的bean,首先找合适带参数的
        5.autodetect:先探测构造器装配(如果有默认构造函数则选择构造注入不然选择byType注入),在选择byType的自动装配.

      spring中的bean五种作用域:

        singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例

        prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例

        request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效

        session:对于每次HTTP Session,使用session定义的Bean豆浆产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效

        globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效

        其中比较常用的是singleton和prototype两种作用域。对于singleton作用域的Bean,每次请求该Bean都将获得相同的实例。容器负责跟踪Bean实例的状态,负责维护Bean实例的生命周期行为;如果一个Bean被设置成prototype作用域,程序每次请求该id的Bean,Spring都会新建一个Bean实例,然后返回给程序。在这种情况下,Spring容器仅仅使用new 关键字创建Bean实例,一旦创建成功,容器不在跟踪实例,也不会维护Bean实例的状态。

        如果不指定Bean的作用域,Spring默认使用singleton作用域。Java在创建Java实例时,需要进行内存申请;销毁实例时,需要完成垃圾回收,这些工作都会导致系统开销的增加。因此,prototype作用域Bean的创建、销毁代价比较大。而singleton作用域的Bean实例一旦创建成功,可以重复使用。因此,除非必要,否则尽量避免将Bean被设置成prototype作用域。

  • 相关阅读:
    【Vue原理】Compile
    vue v-cloak 的作用和用法
    vue中template的作用及使用
    Vue-router 嵌套路由
    Vue keep-alive实践总结
    Vuex入门(2)—— state,mapState,...mapState对象展开符详解
    mysql允许外部连接设置
    Swagger入门教程
    牛客枚举题---铺地毯
    牛客区间求和、枚举、贪心题---数学考试
  • 原文地址:https://www.cnblogs.com/nyhhd/p/12547469.html
Copyright © 2020-2023  润新知