Spring-Framework IOC (二)

项目积累 专栏收录该内容
48 篇文章 0 订阅

前言

     上篇我们简述了Spring框架的内容,今天让我们来看看它的核心思想IOC,如下导图是今天将要讨论的大致内容.
在这里插入图片描述

内容

传统应用程序

  • 发现问题
         类与类-方法与方法间 存在较强的耦合需要解耦,如下图中
// 需要解决的强耦合
private IAccountDao accountDao = new AccoutDaoImpl();

在这里插入图片描述

  • 解决方案
         通过工厂模式解耦,在开发中把三层的对象使用配置文件配置起来,当启动服务器应用加载时,让一个类方法通过读取配置文件,把这些对象创建出来并存起来。
    在使用时直接拿过来用就好。这个读取配置文件/创建/获取 三层对象的类就是工厂。

  • 转变方式—图解
    从 获取对象时采用New的方式(主动)
    在这里插入图片描述
    转换为 获取对象时和工厂要,工厂为我们查找创建对象(被动)
    在这里插入图片描述

引入Spring框架

IOC实现解耦的描述

      把创建对象的权利交给框架,这种被动接收的方式获取对象的思想就是控制反转,是 spring 框架的核心之一。

Dependency Injection - 依赖注入

内容

     在配置文件中说明 当前类需要用到的其它类的对象.当程序在编写时,通过控制反转,把对象的创建交给了 spring,但是代码中不可能出现没有依赖的情况。ioc 解耦只是降低他们的依赖关系,但不会消除。例如:我们的业务层仍会调用持久层的方法。 那这种业务层和持久层的依赖关系,在使用 spring 之后,就让 spring 来维护了.简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取。

注入类型

     基本类型-String(在配置文件/注解配置过的Bean),其它Bean类型,复杂类型/集合类型.

注入方式

  • Set方法注入
          通过配置文件给 bean 中的属性传值:使用 set 方法的方式
          涉及的标签:property
  • 构造函数注入
          类中需要提供一个对应参数列表的构造函数。
          涉及的标签:constructor-arg

IOC解耦方式

XML实现

  • 创建对象
    通过XML中< Bean >标签实现
  • 注入数据
    通过XML中< Bean >中写< property >标签实现
  • 改变作用范围
    通过XML中< Bean >中写scope属性实现
  • 生命周期相关
    通过XML中< Bean >中写init-method/destroy-methode属性实现
  • 配置示例
<bean id = "accountService" class = "com.bxa.service.impl.AccountServiceImpl" scope = "" init-methos = "" destroy-method = "">
<property name = "" value = "" | ref = "" > </property>
</bean>

注解实现

  • 创建对象
    @Controller-表现层
    @Service-业务层
    @Repository-持久层
    @Component-不在以上范围
  • 例图(如@Component) :
    在这里插入图片描述
  • 注入数据
    • 注入基本类型-String
      @Value: 用于注入基本-String类型的数据,属性:value 用于指定属性的值,可使用Spring-EL表达式,SpEL的写法:${表达式}
    • 注入其它bean类型数据
      • Autowired
        自动按照类型注入.可以是变量/方法.只要容器中有唯一的一个Bean对象类型和要注入的变量类型匹配,就可以成功注入.自动按照类型注入。当使用注解注入属性时,set方法可以省略。它只能注入其他bean类型。
      • Qualifier
        在自动按照类型注入的基础之上,再按照 Bean 的 id 注入。它在给字段注入时不能独立使用,必须和@Autowire 一起使用;但是给方法参数注入时,可以独立使用。
      • Resource
        直接按照Bean的id注入.可以独立使用. 属性:name-用于指定bean的id
    • 集合类型只能通过XML实现
  • 改变作用范围
    Scope :指定Bean的作用范围,属性:value-指定范围-singleton-prototype-等
  • 生命周期相关
    • @PreDestroy
      指定销毁方法
    • @PostConstruct
      指定初始化方法
  • 代码示例(如:生命周期相关注解)
    在这里插入图片描述

尾语

      每当准备了很多想要讲述的内容时下笔时又会觉得无法让您完全体会其中的内涵,SpringIOC是思想也是一种很好的实现,或许只有亲手通过项目实践它的历程才能更加全面的体会到它的优秀.下篇我们一起来看看SpringAOP的内容,荣幸与您分享~

  • 1
    点赞
  • 2
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值