Spring通过IOC帮我们做火鸡
前言
什么是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包以及其它知识详见网上一个大神的项目:自学网站
4、spring帮我们在厨房做火鸡
让spring帮我在厨房做火鸡吃,spring根据核心配置文件applicationContext.xml创建了一个中国厨房,然后做了只美国火鸡。
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());
}
}
运行结果:
二、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帮我们做火鸡的更多相关文章
- spring boot到底帮我们做了那些事?
一.前言 上一篇介绍了注解,也是为这一篇做铺垫,传统的都是通过配置文件来启动spring,那spring boot到底是做了什么能让我们快速开发昵? 二.启动原理 看下程序启动的入口, ...
- spring是什么,Spring能帮我们做什么
1. spring是什么? Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发.应用程序是由一组相 ...
- [spring入门学习笔记][spring的IoC原理]
什么叫IoC 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.其中最常见的方式叫做依赖注入(Dependency ...
- Spring的IOC
引用:http://www.cnblogs.com/xdp-gacl/p/4249939.html 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念 ...
- Spring的IOC原理[通俗解释一下]
Spring的IOC原理[通俗解释一下] 1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图 ...
- Spring对IOC的理解
一.IOC控制反转和DI依赖注入 1.控制反转,字面可以理解为:主动权的转移,原来一个应用程序内的对象是类通过new去主动创建并实例化的,对对像创建的主动权在程序代码中.程序不仅要管理业务逻辑也要管理 ...
- 浅析对spring中IOC的理解
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...
- Spring中ioc的实现原理
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...
- Spring的IOC理解(转载)
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...
随机推荐
- heml基础笔记
1.html:全名是超文本标记语言, hyper text mark language 2.html的标签 <p> : <+和标签名 p+>结合而成. 每个标签都有自己的结束 ...
- Apache服务安装及一些基本操作
注意:安装apache服务之前记得搭建yum仓库 1.安装apache服务,输入命令“yum install httpd” 安装成功后,会这样显示 2.需要对Apache服务进行启动,输入命令“sys ...
- opencv MatchTemplate()模板匹配寻找最匹配部分
通常,随着从简单的测量(平方差)到更复杂的测量(相关系数),可以获得越来越准确的匹配,然而,这同时也会以越来越大的计算量为代价.比较科学的方法是对所有这些方法多次测试实验,以便为自己的应用选择同时兼顾 ...
- HashMap的源码学习以及性能分析
HashMap的源码学习以及性能分析 一).Map接口的实现类 HashTable.HashMap.LinkedHashMap.TreeMap 二).HashMap和HashTable的区别 1).H ...
- 编译k8s1.11 kube-apiserver源码
说明 修改k8s1.11 kube-apiserver源码并构建成镜像,最终替换运行在集群中的kube-apiserver pod来验证本次源码修改 参看链接:https://xinchen.blog ...
- 全栈项目|小书架|微信小程序-登录及token鉴权
小程序登录 之前也写过微信小程序登录的相关文章: 微信小程序~新版授权用户登录例子 微信小程序-携带Token无感知登录的网络请求方案 微信小程序开通云开发并利用云函数获取Openid 也可以通过官方 ...
- node后台初始配置(2)
一.node-app结构 创建成功node-app项目后,会自动生成一些文件一般初始的结构如下图 在bin文件夹里面只有一个文件www var port = normalizePort(pr ...
- (五)OpenStack---M版---双节点搭建---Nova安装和配置
↓↓↓↓↓↓↓↓视频已上线B站↓↓↓↓↓↓↓↓ >>>>>>传送门 1.创建nova 和 nova_api数据库 2.获得 admin 凭证来获取只有管理员能执行的 ...
- github下载历史版本--xdd
第一步 打开一个仓库,可以看到此时在主分支下,点击1位置查看历史版本 第二步 现在可以查看到所有的版本(提交)信息,单击2位置进入该版本 第三步 单击3位置浏览并打开该版本 第四步 进入该版本之后,可 ...
- Java多线程编程(5)--线程间通信
一.等待与通知 某些情况下,程序要执行的操作需要满足一定的条件(下文统一将其称之为保护条件)才能执行.在单线程编程中,我们可以使用轮询的方式来实现,即频繁地判断是否满足保护条件,若不满足则继续判断 ...