Java程序员从笨鸟到菜鸟(三十六)Spring IoC和AoP

本文详细介绍了Java程序员在Spring框架中如何理解和运用IoC(控制反转)和AoP(面向切面编程)两大核心特性。通过通俗易懂的例子和详细的配置说明,解释了IoC的依赖注入以及三种注入方式,并探讨了AoP的基本概念、四种实现方式,以及在实际应用中的价值。文章旨在帮助读者深入理解Spring框架,提升开发技能。
摘要由CSDN通过智能技术生成

Spring的两大核心特性IoC和AoP, IoC(Inersion of Control),即控制反转;AoP(Aspact-OrientedProgramming),即面向切面编程

spring的优点:

  1. 降低了组件质检的耦合性,实现软件各层之间的解耦
  2. 可以提供更多服务,如事务处理,消息服务等
  3. 提供单例模式支持
  4. 提供了AoP技术,容易实现权限拦截
  5. 提供了众多辅助类,加快应用程序的开发
  6. 对主流框架提供了集成支持
  7. 独立于各种应用服务器

IoC(控制反转)

依赖注入DI(Dependency Injection)和控制反转IoC(Inversion of Control)是同一个概念,当某个对象需要另外一个对象协助时,在传统的设计g过程中,这些工作是调用者创建被调用者,但在Spring中,创建被调用者实例的工作不再由调用者来完成,此称为控制反转,而是通过Spring来完成,然后注入调用者,因此被称为依赖注入

通俗易懂的例子来阐述IoC

某一天小明生病了,但是不清楚自己到底得了什么病,就知道一些症状,这个时候自己决定去药店买药,药店很多种药,小明选择了其中一种药,付钱吃药,希望早点好起来。但是这个过程对病人来说太辛苦了,需要根据说明书,然后自己买药,这个时候想到了直接去看医生,医生做了检查,知道了症状以及病因,短短的几分钟,医生对症下药就能治好,省时又省力

在实例中医生充当了IoC的作用,根据症状病因,对症下药。小明是对象,药品就是所需要的外部资源。通过了医生,小明不用自己去找药品,而是通过医生给药品

从几个方面来理解IoC

问题一、参与者

  1. 对象
  2. IoC/DI容器
  3. 某个对象的外部资源

问题二、依赖关系及为什么需要依赖
对象依赖IoC容器,对象需要IoC容器来提供对象需要的外部资源

问题三、注入对象和内容
IoC容器注入对象,注入对象所需的外部资源

问题四、控制反转
IoC容器控制对象,主要是控制对象实例的创建,反转是相对于正向而言,例如A要使用C,首先是A直接去创建C的对象,A类主动去获取所需要的外部资源C,这种情况称为正向,反转:就是A不再主动获取C,而是被动等待,等待IoC容器获取一个C的实例,然后再反向注入 A中

问题五、控制反转和依赖注入
依赖注入和控制反转是对同一件事情的不同描述;依赖注入是从应用程序的角度描述,应用程序依赖容器创建并注入它所需要的外部资源控制反转是从容器的角度描述,容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源

依赖注入的三种方式:
  • 接口注入
  • Constructor注入
  • setter注入

三种方式比较

接口注入
具备入侵性,它要求组件必须与特定的接口相关联,因此并不被看好,实际使用有限

Setter注入
对于习惯了传统 javabean 开发的程序员,通过 setter 方法设定依赖关系更加直观。

如果依赖关系较为复杂,那么构造子注入模式的构造函数也会相当庞大,而此时设值注入模式则更为简洁。

如果用到了第三方类库,可能要求我们的组件提供一个默认的构造函数,此时构造子注入模式也不适用

构造器注入
在构造期间完成一个完整的、合法的对象,所有依赖关系在构造函数中集中呈现,依赖关系在构造时由容器一次性设定,组件被创建之后一直处于相对不变的稳定状态,只有组件的创建者关心其内部的依赖关系

依赖注入

定义一个Car接口

public interface Car {
    public void run();
}

定义一个AudiCar类实现Car接口

public class AudiCar implements Car{
   
    private String name; // 汽车系列名称

    @Override
    public void run() {
        System.out.println("奥迪" + name + "... is running");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

测试类:

public class TestIoC {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("ioc/applicationContext-ioc.xml");
        Car car = (Car)applicationContext.getBean("audiCar");
        car.run();
    }
}

配置文件:

<?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-4.0.xsd">

    <bean id="audiCar" 
软件简介: 现代人常有失眠、入睡难、睡觉不踏实、入睡不深、怯恐症、焦虑症、强迫症、抑郁性神经症、适应障碍、厌学、迷恋游戏、心理创伤、交际障碍、神经疼痛、神经衰弱、神经性头痛、先天性神经衰弱等症状。 本软件采用催眠疗法的机理,可产生大自然的背景声,配合同步产生的的α波,让你的心情因其美妙动听的旋律和充满大自然的声音产生一种莫名的安宁,从而让自己的心理进入一种轻松缥缈的境地。这种心理对有以上症状的人非常有益,可以让人的精神彻底放松,享受清净。从而在这种状态中静静入睡,睡眠质量将得到很大改善。 本版是绿色破解版,无使用限制。可以自由添加睡眠音乐和任意设定关机时间。不想使用软件播放音乐,也可将音乐拷贝到MP3播放器中使用。 催眠音乐说明: 睡眠是每个人在生命中都必须满足的一种绝对需要,就像食物和水一样。科学证明:人只要缺乏睡眠,失眠或是睡眠质量不高,就会变得坐立不安,情绪波动,记忆力减退,判断能力下降,甚至出现一些错觉和幻觉,以致难以坚持日常生活和活动。人的一生当中大约有三分之一的时间用于睡眠,所以,睡眠对每个人来讲,都是不可或缺的生命需要。 婴儿睡眠不足,不但影响身体生长,而且有可能影响大脑的正常发育。成年人睡眠不足,不仅影响其体力恢复,更不利于心理健康。老年人睡眠不足,可能加速脑的衰老。 失眠:通常指患者对睡眠时间和或质量不满足并影响白天社会功能的一种主观体验。 1. 入睡困难 2. 不能熟睡 3. 早醒、醒后无法再入睡 4. 睡过之后精力没有恢复 5. 容易被惊醒,有的对声音敏感,有的对灯光敏感 ...... 失眠会引起人的疲劳感、不安、全身不适、无精打采、反应迟缓、头痛、记忆力不集中,它的最大影响是精神方面的,严重一点会导致精神分裂。 人生在世,五谷杂粮,巨大的社会竞争,纷繁的生活压力,复杂的情感纠葛......没有人可以彻底摆脱曾经失眠以及睡眠质量欠佳的困扰。也许现在暂时没有,但是将来谁也无法确保不发生。 本音乐向渴望健康睡眠的人们,提供了进入深度睡眠的有效办法。旋律轻柔、乐音委婉,营造特别的安然气氛,帮助失眠者克服不利睡眠的因素,是提升睡眠质量的最佳音疗选择。让充满活力的朝气重新恢复,让所有内在积压的压力与倦怠彻底的排遣。 美国音乐治疗协会,推荐休闲治疗方式。睡出谧静和天然朝气!都市纷繁复杂的快节奏,带来长期慢性疲劳和精神紧张,多久没有好好的睡上一个好觉了,暂且放下一切的执着,让音乐重新帮你找回失去已久的自然睡眠,静静的享受婴儿般深度睡眠的乐趣......在甜美的梦乡中再次遇到久违的白马王子和天使。 提示: 1.除可促进睡眠,亦可作为日常放松、休闲、静心、伴读等之聆听,宛若仙境、效果甚佳。 2.睡眠音乐开始作用不会显著,因为聆听者最初不熟悉音乐的旋律,总是好奇感居多,总是听音乐的心理多于疗效的心理,故初始较难进入意境状态,时间长了就会好的,才会体现音乐的作用。 3.睡眠音乐不能总听一个专辑,如同洗发水一样,总用一个牌子就会对去头屑产生抗体。音乐亦是如此,睡眠音乐应该在尽可能的情况下,通过实践找到几个适合自己静心放松的不同韵律专辑,轮换聆听,才会更加相得益彰。 4. 值得一提的是,本专辑CD1只有三首曲目,故每首曲目时间都相对较长,比如第1曲就有近30分钟的时间。实验证明,很多人在真正静心放松时,还未听完第一曲就已经进入了梦境。因此如果伴以入眠,家中无人时,请注意设置好播放器的定时功能,预防以免损耗机器及浪费电能的发生。 音乐目录: 1.舞随光动 Dancing with the Neon Light 2.深蓝梦 Dream in Dark Blue 3.心灵感悟 Sentiment of My Heart 4.细水长流 Running Water in the Long Rill 5.花絮轻撒 Rose Petal Floating 6.爱的轮回 Love is Around 7.月影摇曳 Shadow Shaking in the Moonlight 8.逐梦 Catching Dreams 9.萦绕天使 Angel Flying Around 10.夜宴 Deep Night
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值