学习Spring札记_IoC(控制反转)简介

学习Spring笔记_IoC(控制反转)简介

学习内容:Spring2.5.6中的IoCInversion of Control)简单介绍。

 

用到Jar包(可以在附件中下载):spring.jarcommons-logging.jar

 

 

简单工作过程:spring容器读取相应beans.xml配置文件,通过配置文件中的beanproperty利用反射机制(spring容器提供方法)实例化相应类以及实例化该类中属性(类类型)。

 

IoC控制反转概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系
IoC
控制反转核心:bean工厂;在Spring中,bean工厂创建的各个实例称作bean

 

 

 

用具体例子说明Spring IoC用法:

model层(VO):

User.java

package com.yusj.model;

public class User {
	private String username ;
	private String password ;
	
	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;
	}
	
	@Override
	public String toString() {
		return "User [username=" + username + ", password=" + password + "]";
	}
	
}

DAO层: 

 

 

IUserDAO.java

package com.yusj.dao;

import com.yusj.model.User;

public interface IUserDAO {
	public void save(User user) ;
}

UserDAOImpl.java 

 

 

package com.yusj.dao.impl;

import com.yusj.dao.IUserDAO;
import com.yusj.model.User;

public class UserDAOImpl implements IUserDAO {
	@Override
	public void save(User user) {
		System.out.println("user save success...");
		System.out.println(user.toString());
	}
}

 service层:

 

 

IUserService.java

package com.yusj.service;

import com.yusj.model.User;

public interface IUserService {
	public void add(User user) ;
}

 UserServiceImpl.java

 

package com.yusj.service.impl;

import com.yusj.dao.IUserDAO;
import com.yusj.model.User;
import com.yusj.service.IUserService;

public class UserServiceImpl implements IUserService {
	// 为此属性提供setter,getter方法.是为了让Spring容器管理
	private IUserDAO userDAO ; 

	public IUserDAO getUserDAO() {
		return userDAO;
	}
	public void setUserDAO(IUserDAO userDAO) {
		this.userDAO = userDAO;
	}

	@Override
	public void add(User user) {
		userDAO.save(user);
	}

}

 

spring所用到的配置文件:

beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- spring2.5配置文件固定写法 -->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
  
  <!-- 
    1. 定义一个com.yusj.dao.impl.UserDAOImpl类型的bean.
    2. 在Spring容器中通过udi获取相应bean实例.
  -->
  <bean id="udi" class="com.yusj.dao.impl.UserDAOImpl"/>
  
  <!--
    1. 定义一个com.yusj.service.impl.UserServiceImpl类型的bean.
    2. 在Spring容器中通过usi获取相应bean实例 .
    3. 在com.yusj.service.impl.UserServiceImpl类中必须定义userDAO属性和其setter,getter方法.
    4. ref标签中bean属性必须是在配置文件中已经定义好的.       
  -->
  <bean id="usi" class="com.yusj.service.impl.UserServiceImpl">
    <property name="userDAO">
      <ref bean="udi"/>
    </property>
  </bean>
  
</beans>

 

 

 

测试结果类:

Test.java

package com.yusj.spring;

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

import com.yusj.model.User;
import com.yusj.service.IUserService;

public class Test {

	public static void main(String[] args) {
		
		/**
		 * Spring提供的读取配置文件方法,此处推荐使用ApplicationContext而非BeanFactory.
		 * beans配置文件默认读取src根目录文件名相同的XML文件
		 * 如果需要放在特殊的位置,那么需要指定具体路径,比如:com/yusj/xml/beans.xml
		 * 
		 */
		ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
		/**
		 * 获取beans.xml中id="usi"的bean标签所对应的实体类,通过反射机制将其实例化
		 * 具体实例化过程请见beans.xml文件的详细说明
		 * 
		 */
		IUserService service = (IUserService) ctx.getBean("usi");
		// 初始化用户并赋值
		User u = new User();
		u.setUsername("张三");
		u.setPassword("zhangsan");
		// 添加用户测试
		service.add(u);
		/**
		 * 输出结果:
		 * user save success...
		 * User [username=张三, password=zhangsan]
		 */
	}
}

 

 

Eclipse导出工程见附件(Export -> General -> File System