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操作工具)

       事务

 

posted @ 2020-04-01 18:02  繁华乱世  阅读(3207)  评论(0编辑  收藏  举报