Spring通过IOC帮我们做火鸡

站长

发表文章数:4335

[Abp vNext 源码分析] - 13. 本地事件总线与分布式事件总线 (Rabbit MQ)

前言

什么是IOC,IOC是控制反转,打个比方,本来你自己new一只火鸡,现在让控制权交给spring,它使用依赖注入的技术做给你吃。

一、IOC——setter注入

1、准备dmo

首先准备一只火鸡

public class Turkey {
    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

然后准备一个厨房, 属性包含火鸡

public class Cookhouse {
    private int id;
    private String name;
    private Turkey turkey;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public Turkey getTurkey() {
        return turkey;
    }

    public void setTurkey(Turkey turkey) {
        this.turkey = turkey;
    }

    @Override
    public String toString() {
        return "Cookhouse{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

2、applicationContext.xml配置

给bean起个名字,class就是dmo类,property name是属性名,value和ref是属性值,如果属性是对象要使用"ref="

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <bean name="t" class="Turkey">
        <property name="name" value="usaTurkey"/>
    </bean>

    <bean name="c" class="Cookhouse">
        <property name="name" value="cnCookhouse"/>
        <property name="turkey" ref="t"/>
    </bean>
</beans>

3、添加spring的相关JAR包

JAR包以及其它知识详见网上一个大神的项目:自学网站
Spring通过IOC帮我们做火鸡

4、spring帮我们在厨房做火鸡

让spring帮我在厨房做火鸡吃,spring根据核心配置文件applicationContext.xml创建了一个中国厨房,然后做了只美国火鸡。

DRF Django REST framework 之 解析器(二)

public class TestSpring {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});
        Cookhouse c = (Cookhouse)applicationContext.getBean("c");
        System.out.println(c.getName()+"做了只"+c.getTurkey().getName());
    }
}

运行结果:
Spring通过IOC帮我们做火鸡

二、IOC——注解注入

有小伙伴说:火鸡做太慢,等饿了
spring说:那我来用注解注入的方式给你做火鸡

1、@Autowired对属性的注解

首先优化对象的注入方式,applicationContext.xml添加<context:annotation-config/>,表示告诉Spring要用注解的方式进行注入,<property name="turkey" ref="t"/>就可以注释掉了,我们只需要在Cookhouse类的属性Turkey上面加上@Autowired就可以注入火鸡了

@Autowired
    private Turkey turkey;

2、@Component对Bean的注解

然后优化Bean的注入方式,applicationContext.xml的Bean注入看上去还是比较繁琐,我们再简化下,只新增:

<context:component-scan base-package="com.fantasy.dmo"/>
其作用是告诉Spring,bean都放在这个包下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <!--bean都放在这个包下-->
    <context:component-scan base-package="com.fantasy.dmo"/>
</beans>

因为Bean移到dmo了,所以在dmo分别给Cookhouse和Turkey加上注解@Component,然后给它们的属性name命名。

@Component("c")
public class Cookhouse {
    private int id;
    private String name="cnCookhouse";
    @Autowired
    private Turkey turkey;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public Turkey getTurkey() {
        return turkey;
    }

    public void setTurkey(Turkey turkey) {
        this.turkey = turkey;
    }

    @Override
    public String toString() {
        return "com.fantasy.dmo.Cookhouse{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

@Component("t")
public class Turkey {
    private int id;
    private String name="usaTurkey";

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

运行程序发现结果一样,又省去很多配置,香喷喷的火鸡做的更快了呢~
Spring通过IOC帮我们做火鸡

关于flask-sqlalchemy的用法研究

未经允许不得转载作者:站长, 转载或复制请以 超链接形式 并注明出处 xss云之家,资源网,娱乐网,网络技术资源分享平台
原文地址:《Spring通过IOC帮我们做火鸡》 发布于2019-12-10

分享到:
赞(0) 打赏 生成海报

长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

投稿赚钱
2020年在家赚取零花钱
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册