zoukankan      html  css  js  c++  java
  • Spring的理解以及Spring的四个功能

    Spring 的简介:

             Spring 是一个轻量级的业务层框架,与之相关的还有Spring MVC(控制层)以及Mybitis(持久层框架),Spring框架主要是为了提高开发效率,以及解耦。为什么能提高开发效率和解耦,是因为Spring 里面的四个功能,以及它的核心理念(约定优于配置),接下来,我就以它的四个功能以及核心理念去阐述:

         四个功能:IOC(控制反转)/DI(依赖注入),AOP(面向切面编程),jdbcTemplate(Spring 利用AOP思想封装的jdbc操作工具),事务

          IOC(控制反转)/DI(依赖注入):

         1.什么是控制反转,就是将New对象的权利交给了IOC容器,在没有Spring之前,new对象的权利在我们自己的手中。

         2. 那么这样做有什么好处呢?在没有控制反转之前,如果我们要实现某个功能,需要ABC三个对象的相互协调,那么他们之间就是相互调用,如果一个对象改变的话,那么其他的要去改变,所以耦合度是非常高的,不易扩展,不易维护,不易测试。而IOC的思想的诞生就很好的解决了这些问题,首先我们不需要去管理对象的整个生命周期了,对象的管理交给了IOC容器,我们不需要关心他是如何管理的,只需要在我们要使用某个对象的时候告诉他,他将对象给我们。这也是面向对象思想的一个具体的实现,不需要关心对象是如何产生的,只需要关心我什么时候要用,然后告诉容器。

         3.什么是依赖注入,依赖注入其实是IOC的另一个名字,和IOC是同一个概念,但是是从不同的角度去理解。那么要理解他的话,也很容易,首先是依赖,谁依赖谁:当然是应用程序依赖容器,为什么要依赖:应用程序需要容器提供对象需要的外部资源,谁注入谁:容器注入应用程序的某个对象,注入了什么:注入某个对象所需要的外部资源(常见的就是对象)

         4.如何做(注入)

            在做之前,我们要先了解一下,注入的是什么,上边只是抽象的解释了注入的是对象所需要的外部资源,那么具体是什么呢?“Bean”,在IOC容器中,Bean就相当于水,而容器相当于水桶,两者缺一不可,谁也离不开谁,看过源码后,就会觉得bean的定义其实很简单,就是普通的pojo。接下来我们看一下Bean是如何获取的。

         5.Bean的获取:当Bean被注入到Spring中后,获取它只需要两步,第一步加载配置文件,当配置文件被加载的时候,Spring 会初始化你刚注入的Bean,然后将它变成一个普通的POJO,第二步就是获取Bean,获取就很简单了,pojo如何调用 ,想必已经很熟练了,构造方法中的get方法去获取。

           我们了解了如何获取Bean,但在获取之前我们需要先注入Bean,怎么注入呢?在这里,我只提供思路,具体的实现ctrl c v,其实也不需要记这些东西,如果有兴趣的话,可以钻研,也可以自己去实现,然后保存在GitHub上,什么时候需要了,什么时候克隆下载。

         6.Bean的注入:注入的方式,xml注入,java配置,自动化扫描。我们一个一个看:

                                    6.1:xml注入,属性的注入,第一个是构造方法的注入,第一步:给Bean添加构造方法,第二步,在xml中注入,第二个set方法注入:这个比较简单,和set方法给对象赋值一个道理。第三个是外部Bean的注入:外部bean的话,是没有构造方法的,它的构造是通过Bulider来实现的,所以不能使用上边的方式去注入,这里提供两种方法,静态工厂注入,和实例工厂注入。

    复杂属性的注入:注入方式和上边的差不多,这里只简单说一下都有什么注入,对象,数组,list,map,properties。

                                    6.2:java配置:在Spring Boot之前,对于java的配置很少使用,但是Springboot之后,ava 配置开发被广泛使用,因为在 Spring Boot 中,不使用一行 XML 配置。那么是如何配置的呢,首先首先在配置类上有一个 @Configuration 注解,它的作用就是告诉Spring,这不是一个普通类,而是一个注解类,这个类就相当于对spring的配置applicationContext.xml。然后定义一个方法,

    方法上添加@Bean注解,相当于applicationContext.xml的Bean节点,方法返回对象,返回的对象就会被注入到容器中。Bean的名字默认就是方法民=名,如果想要自定义的话也可以,这就是Spring的约定大于配置的理念,你不说,就按照默认的来,比说了,就按照你说的配置就好了。

                                    6.3:自动化配置:自动化配置既可以通过 Java 配置来实现,也可以通过 xml 配置来实现。我们日常工作中,大量使用自动化配置。具体的代码请看我这篇博客,https://www.cnblogs.com/javazl/p/12553730.html  我只说一下常用的几个类注解:

    • 在 Service 层上,添加注解时,使用 @Service
    • 在 Dao 层,添加注解时,使用 @Repository
    • 在 Controller 层,添加注解时,使用 @Controller
    • 在其他组件上添加注解时,使用 @Componen

    自动扫描时的对象注入有三种方式:

    1. @Autowired(常用) 是根据类型去查找,然后赋值,这个类型只可以有一个对象。
    2. @Resources
    3. @Injected

    添加完注解之后就要开始自动话扫描了:在项目启动中加载配置类,在配置类中@ComponentScan 注解指定要扫描的包。

             AOP(面向切面编程)

             面向切面编程,其实是对面向对象编程的一种补充,他是一种思想,使得本不应该粘合在一起的功能分开,主要的功能就是再不改变源码的基础上,动态的增强方法的功能,目的是为了降低代码的耦合度,从而达到容易维护和提高代码的重用。它的设计思想来源于代理模式,在此基础上对其进行封装和扩展。使用代理对象,在不修改源码的基础上,直接在业务流程中切入新的代码实现新的功能。比如日志(的输入),(启动数据库)事务,对数据库的操作。

         在这些操作中,无一例外都是模板化的代码 ,而AOP的特点就是解决模板化问题。

        AOP中常见的几个概念:

    切点:要添加代码的地方,成为切点。

    通知(增强):向切点动态添加代码。

    切面:切点加通知(增强)

    连接点:切点的定义。

    Aop的实现:它的实现是基于java的动态代理,java的动态代理有两种实现方式,cglib和jdk。

            jdbcTemplate(Spring 利用AOP思想封装的jdbc操作工具)

           事务

  • 相关阅读:
    进制
    流程控制
    运算符
    格式化输出
    数据结构-树的遍历
    A1004 Counting Leaves (30分)
    A1106 Lowest Price in Supply Chain (25分)
    A1094 The Largest Generation (25分)
    A1090 Highest Price in Supply Chain (25分)
    A1079 Total Sales of Supply Chain (25分)
  • 原文地址:https://www.cnblogs.com/javazl/p/12613691.html
Copyright © 2011-2022 走看看