您的位置:首页 > 编程语言 > Java开发

Spring的IoC/DI的理解

2014-02-17 22:47 323 查看
在对《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容器进行实例化控制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息