一、Spring概念

  1.Spring框架概述
    轻量级的Java EE开源框架,它是由Rod Johnson为了解决企业应用程序开发的复杂性而创建,
    Spring框架提供了一个开发平台,用于整合其他技术,例如Struts,Hibernate,Mybatis等。

  2.Spring优点

    低侵入式设计
    独立于各种应用服务器
    依赖注入特性将组件关系透明化,降低了耦合度
    面向切面编程特性允许将通用任务进行集中式处理
    与第三方框架的良好整合

  3.Spring家族

    Spring框架大约由20个功能模块组成,这些模块又被分为6部分,分别是Core Container、Data Access/Integration、Web、AOP(Aspect Oriented Programming)、Instrumentation、Test,如下图所示。

  
二、SpringIoC

  1.Spring概念

    IoC(Inversion of Control),即控制反转,也称为依赖注入(Dependency Injection,DI)。控制反转是面向对象编程中的一种涉及理念,用来降低程序代码之间的耦合度、依赖,它也是Spring的一个核心概念。

`   2.实现思想
    将组件对象的控制权从代码本身转移到外部容器
    组件化的思想:分离关注点,接口和实现分离
    依赖的注入:将组件的构建和使用分开(运行时注入)
    目的:解耦合。实现每个组件时只关注组件内部的事情
    要点:明确定义组件间的接口

三、AOP机制

  1.概念
    AOP又被称为面向方面编程,其实就是在面向对象的基础上又进行了一次封装,由于面向对象是将共同的属性和方法封装起来,
    而面向切面编程则是面向共同的方面逻辑,如事务和异常,所有的对象都会产生这样一个共性的方面。
    它将复杂的需求分解出不同方面,将散布在系统中的公共功能集中解决

  2.什么是面向切面编程

    是一种通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态添加功能的技术

  3.为什么使用AOP

    3.1 就是为了方便,把自己做的事情都让Spring容器去做了。用了AOP能让开发人员少写很多代码
    3.2 就是为了更清晰的逻辑,可以让我的业务逻辑去关注自己本身的业务,而不去想一些其他的事情。这些其他的事情包括:安全,事物,日志等等。

  4.OOP与AOP的区别

    这两种设计思想在目标上有着本质的差异。具体如下:
    OOP:针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分
    AOP:针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或者阶段,
       以获得逻辑过程中各部分之间低耦合的隔离效果。

四、Spring打印机案例

1.导入依赖

<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>5.1.5.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.1.5.RELEASE</version>
    </dependency>

2.创建接口、实体类、测试类、配置文件

2.1墨盒

  2.2.1创建墨盒接口

    

  2.2.2彩色墨盒类实现墨盒接口

    

  2.2.3黑白墨盒类实现墨盒接口

    

2.2 纸张

  2.2.1 创建纸张接口

    

  2.2.2 A4纸类并实现纸张接口

    

  2.2.3 B5纸类并实现纸张接口

    

 2.3 配置文件applicationContext.xml文件

  

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--注入bean
        id相当于当前bean唯一标识
        class是bean 的全路径
        property注入bean中的属性         必须封装
    -->
   <!--注入纸张-->
    <bean id="a4Paper" class="cn.spring.print.paper.A4Paper"></bean>
    <bean id="b5Paper" class="cn.spring.print.paper.B5Paper"></bean>

    <!--注入彩色墨盒         Bean的注入都是实现类-->
    <bean id="colorInk" class="cn.spring.print.Ink.ColorInk"></bean>
    <!--注入黑白墨盒         Bean的注入都是实现类-->
    <bean id="grayInk" class="cn.spring.print.Ink.GrayInk"></bean>

    <!--打印机-->
    <bean id="printer" class="cn.spring.print.print.Printer">
        <!--将纸张和墨盒组合起来-->
        <property name="paper" ref="b5Paper"></property>
        <property name="ink" ref="colorInk"></property>
    </bean>
</beans>

  2.4  test测试类

    

最新文章

  1. 【转载】C/C++中extern关键字详解
  2. ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1)
  3. leetcode-Warm Up Contest-Aug.21
  4. FreeMarker中List排序
  5. 加密解密(7)*PKI基础知识(完整)
  6. java学习之创建线程方法二
  7. jsp中的动作元素:&lt;jsp:plugin&gt;
  8. ESPlatform 支持的三种群集模型 —— ESFramework通信框架 4.0 进阶(09)
  9. javascript . 05 json的组成、for...in 遍历对象、简单数据类型与复杂数据类型的传值与传址、内置对象
  10. Java接口和抽象类的理解
  11. HDU 5909 Tree Cutting
  12. 安卓基础之通过Intent跳转Activity
  13. 360. Sort Transformed Array二元一次方程返回大数序列
  14. cc2650-cc2640蓝牙开发准备手记
  15. Linux产生序列数字
  16. P4052 [JSOI2007]文本生成器
  17. JavaWeb 基础面试
  18. UVa 10328 Coin Toss(Java大数+递推)
  19. 【转】Selenium2 API详解
  20. 深入浅出MFC学习笔记 第三章 MFC六大关键技术之仿真

热门文章

  1. vim 常用命令总结(排版精良,内容优质)
  2. Python类的访问限制
  3. Python习题001
  4. PAT甲级题分类汇编——杂项
  5. pandas之时间序列笔记
  6. 【Linux】Shell批量修改文件名
  7. IO中断
  8. 【转载】C#使用Split函数根据特定分隔符分割字符串
  9. Pycharm和Android工具之github使用
  10. javascript_09-数组