Spring的IoC/DI的理解

在对《Spring技术内幕》通读之后,终于对Spring IoC及AOP有了一点理解,以下为个人理解,如有不妥,欢迎大家指正,谢谢!

一、Spring IoC也称控制反转或依赖注入

理解:将对象的创建交给IoC容器进行管理(IoC容器也就是我们俗称的BeanFactory或者是ApplicationContext),由IoC容器负责引用对象的创建

传统的方法:

由于Demo类中包含User类(就是IoC中所称的依赖),如果Demo类的话就需要使用User类的话,必须由Demo类自己创建User类的一个实例来引用,User创建的由Demo进行控制,这个时候就产生了高度耦合。

缺陷:

1).如果后期修改了User的构造方法,那每个依赖User的类型可能都需要进行修改,这样就形成了代码的高度耦合了。

2).每new一个对象时需要消耗一定内存的,像具有几十或者几百个Bean时会对应用产生一定的压力。

代码示例:

package com.jeng.mvc.model;

import java.io.Serializable;

public class Demo implements Serializable {
	
	private static final long serialVersionUID = -792765360926635161L;
	
	private Long id;
	private String name;
	private User user = new User();
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Demo() {
		super();
	}	
}

采用了Spring IoC技术:

IoC容器管理对象之间的依赖关系(对象的创建),由于Demo中提供User的set方法,IoC容器通过set方法将创建好的User对象注入到Demo中,此时Demo就可以通过getUser()获得User的引用,

代码示例:

package com.jeng.mvc.model;

import java.io.Serializable;

public class Demo implements Serializable {
	
	private static final long serialVersionUID = -792765360926635161L;
	
	private Long id;
	private String name;
	private User user;
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Demo() {
		super();
	}	
}

优点:

1).IoC容器提供给依赖对象的接口setUser()和getUser()方法,由IoC容器负责依赖对象的创建,Demo只负责调用getUser()即可,不必关系对象的实例化,实现了松耦合

2).IoC容器还可对Bean做特殊的处理,比如定义Bean的单例模式等


总结:

A类包含B类(或A类依赖B类)

依赖注入就是由IoC容器负责A类的依赖关系中B类的实例化,并由IoC注入到B类中。

控制反转就是将原本属于A类实例化B类的控制,交给IoC容器进行实例化控制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值