Spring-Framework IOC (二)

命运对每个人都是一样的,不一样的是各自的努力和付出不同,付出的越多,努力的越多,得到的回报也越多,在你累的时候请看一下身边比你成功却还比你更努力的人,这样,你就会更有动力。

导读:本篇文章讲解 Spring-Framework IOC (二),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

前言

     上篇我们简述了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的内容,荣幸与您分享~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/144240.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!