spring容器的概念

发表时间:2017-05-17 17:40:07 浏览量( 42 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

相信上一节你就给spring的诸多概念搞到你头晕了,这里我们先关注一个spring其实就是一个容器,使用IOC的方式管理所有的组件的,组件之间是有关系,使用DI方式描述组件之间的关系,这节课我们就通过编码的方式让大家好好理解一下这些概念。

一、搭建spring环境

你可以先上spring的官网下载spring框架,这里我们先以Spring 3进行讲解,虽然spring 4已经发布了,不过目前还是有很多项目是以spring 3.0进行开发的,所有还是先讲解spring 3.0吧。

1、导报

spring需要的包比较多,这里就暂时不用管每个包有什么作用了,以后我们会使用meaven管理这些包。

2、配置文件

spring需要一个配置文件,配置所有的组件以及组件之间的关系,我们这里就在src下面建立一个xml的配置文件,文件名称可以任意取名,这里就先取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">


</beans>

只有一个根元素beans,每一个组件称为一个bean,所以等会我们就要声明bean组件了。

二、依赖注入的多种方式

现在我们先定义一个简单类,这个类包含了一些简单的属性和方法,这个类就是一个组件,以前我们需要使用这个组件,当然需要先构造这个类的对象,现在要使用IOC的方式,把所有的组件通过spring容器管理起来,所以我们现在需要的是在spring的配置文件中配置这个组件,交给spring容器管理这个组件。

1、新建两个简单类作为组件,Teacher类的代码如下:

  package com.pojo;

public class Teacher {
	
	private int id;
	private String name;
	
	public Teacher(){
		
	}
	
	public Teacher(int id,String name){
		this.id=id;
		this.name=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;
	}
	
	

}

User类代码如下;

  public class User {

	private String username;
	private String password;

	private List<String> likes;// 爱好
	private Set<String> subjects;// 科目
	private Map<String, Double> achievements;// 成绩

	private Teacher teacher;//

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public List<String> getLikes() {
		return likes;
	}

	public void setLikes(List<String> likes) {
		this.likes = likes;
	}

	public Set<String> getSubjects() {
		return subjects;
	}

	public void setSubjects(Set<String> subjects) {
		this.subjects = subjects;
	}

	public Map<String, Double> getAchievements() {
		return achievements;
	}

	public void setAchievements(Map<String, Double> achievements) {
		this.achievements = achievements;
	}

	public Teacher getTeacher() {
		return teacher;
	}

	public void setTeacher(Teacher teacher) {
		this.teacher = teacher;
	}

}

2、在配置文件中配置这个组件

(1)使用构造方法注入

  <!-- 使用构造方法注入 -->
	<bean id="teacher" class="com.pojo.Teacher">
		<constructor-arg>
			<value>1</value>
		</constructor-arg>
		<constructor-arg>
			<value>张老师</value>
		</constructor-arg>
	</bean>

(2)使用属性注入,需要该属性提供一个set方法,因为在注入时会调用set方法。

  <!-- 属性注入 set方法 -->
	<bean name="user" class="com.pojo.User">
		<!-- 基本属性注入 -->
		<property name="username" value="张三"></property>
		<property name="password">
			<value>123</value>
		</property>

		<!-- List -->
		<property name="likes">
			<list>
				<value>体育</value>
				<value>读书</value>
			</list>
		</property>

		<!-- set -->
		<property name="subjects">
			<set>
				<value>语文</value>
				<value>数学</value>
				<value>语文</value>
			</set>
		</property>

		<!-- map -->
		<property name="achievements">
			<map>
				<entry key="语文">
					<value>99</value>
				</entry>
				<entry key="数学" value="59"></entry>
			</map>
		</property>

		<!-- 对象注入 -->
		<property name="teacher" ref="teacher">
		</property>

	</bean>

3、测试

写一个main方法从spring容器中获得这两个组件对象,然后打印出来看看,发现所有的注入的属性值都是有效,测试代码如下:

  public class Run {

	public static void main(String[] args) {

		// 1、加载spring容器,   
		ApplicationContext context = new FileSystemXmlApplicationContext(
				"src/applicationContext.xml");
		
		Teacher teacher=(Teacher)context.getBean("teacher");
		System.out.println(teacher.getId());
		System.out.println(teacher.getName());
		
		
		User user=(User)context.getBean("user");
		System.out.println(user.getUsername());
		Map<String, Double> map=user.getAchievements();
		System.out.println(map.get("语文"));
		
		System.out.println(user.getTeacher().getName());

	}

}