`
happy513842343
  • 浏览: 32628 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
社区版块
存档分类
最新评论

spring依赖注入(IOC)——解析

 
阅读更多

1、spring依赖注入定义(IOC)

依赖注入也叫控制反转,它是指运行过程中,如果需要调用另外一个对象协助时,无需在代码中创建被调用者(实例对象),而是依赖于外部的注入;

依赖注入分两种类型:设置注入,构造注入。

2、依赖注入事例——设置注入

Human接口

package com.centit.service;

public interface Human {
	public void eat();
	public void ask();
}

Lanuage接口

package com.centit.service;

public interface Language {
	public String kind();
}

Chinese对Human的实现类,

package com.centit.serviceImpl;

import com.centit.service.Human;
import com.centit.service.Language;

public class Chinese implements Human {
	private Language language;
	@Override
	public void ask() {
		// TODO Auto-generated method stub
		System.out.println("我是中国人,说普通话");
		System.out.println(language.kind());

	}
	public Chinese() {
		
	}
	
	@Override
	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("我是中国人,只吃中国菜");
	}

	public Language getLanguage() {
		return language;
	}
	//设置注入(依赖注入)
	public void setLanguage(Language language) {
		this.language = language;
	}
	
}
LanguageImpl是Language实现类

package com.centit.serviceImpl;

import com.centit.service.Language;

public class LanguageImpl implements Language {

	@Override
	public String kind() {
		// TODO Auto-generated method stub
		return "中国人也说英文";
	}

}



applicationContext.xml配置文件

<?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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

	<bean id="chinese" class="com.centit.serviceImpl.Chinese">
		<property name="language" ref="language"></property>
	</bean>
	<bean id="american" class="com.centit.serviceImpl.American"></bean>
	<bean id="language" class="com.centit.serviceImpl.LanguageImpl"></bean>
</beans>

Test测试类

package com.centit.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import com.centit.SessionFactory.SessionFactory;
import com.centit.service.Human;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ApplicationContext ctx=new FileSystemXmlApplicationContext("src/applicationContext.xml");
		Human human=(Human)ctx.getBean("chinese");
		human.ask();
		human.eat();
		human=(Human)ctx.getBean("american");
		human.ask();
		human.eat();
	}

}


这就是设置注入的事例,

3、依赖注入——构造注入

构造注入和依赖注入的区别就在Chinese实现中,增加一个含参数的构造函数

public void ask() {
// TODO Auto-generated method stub
System.out.println("我是中国人,说普通话");
System.out.println(language.kind());
}
public Chinese() {

}
public Chinese(Language language) {
super();
this.language = language;
}
同时applicationContext.xml配置文件有点小区别

<?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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

	<bean id="chinese" class="com.centit.serviceImpl.Chinese">
		<constructor-arg ref="language"></constructor-arg>
	</bean>
	<bean id="american" class="com.centit.serviceImpl.American"></bean>
	<bean id="language" class="com.centit.serviceImpl.LanguageImpl"></bean>
</beans>



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics