【开发者笔记】揣摩Spring-ioc初探,ioc是不是单例?

前言:

  控制反转(Inversion of Control,英文缩写为IoC)把创建对象的权利交给框架,是框架的重要特征,并非面向对象编程的专用术语。它包括依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。初探Spring,当看到这句话的时候,突发奇想其实IOC是不是就是一个单例模式的对象创建工具呢。Spring在创建之初会根据配置文件和代码中的注解,分析哪些Bean是需要创建的,于是将该类对象一一创建到缓存中,当接收到前端请求时,调用到对应的对象就去缓存池里面找,那么到底是不是这个意思呢?于是我来做一个小小的测试。

实验原理:

  1、搭建Spring框架,使之能正常进行依赖注入

  2、注入一个带有属性的普通对象A到容器中,这个普通对象A有一个带有getter和setter的属性

  3、编写对A对象进行读写的Controller

  4、调用一次A对象的写操作

  5、调用多次A对象的读操作

  6、如果多次调用A对象的读操作得到的结果都是第4步中写的结果,那么证明注入的结果和单例模式得到的结果是一样的,实验成功,如果多次读取操作得到的结果并不是第4步中写的结果,那么理解有偏差。

实验步骤:

  1、编写A对象:

 

package com.wyb.serviceimpl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.wyb.dao.BookDao;
import com.wyb.dao.UserMapper;
import com.wyb.model.User;
import com.wyb.service.UserService;

@Service
public class UseServiceImpl implements UserService {
	
	private String name;
	@Autowired
	private UserMapper userMapper;

	public User findUserById(int id) {
		User user = userMapper.selectByPrimaryKey(id);
		return user;
	}

	public String getName() {
		// TODO Auto-generated method stub
		return name;
	}

	public void setName(String name) {
		// TODO Auto-generated method stub
		this.name = name;
	}
	
	public String myToString(){
		return "IocTest:"+super.toString()+",this.name="+this.name;
	}
	
}

  

  2、编写A对象的读写操作Controller

	@RequestMapping(value = "/list", method = RequestMethod.GET)
	@ResponseBody
	private String list(Model model,HttpServletRequest request) {
		String name = request.getParameter("name");
		String result  = null;
		if(!"".equals(name)&&name != null){
			userService.setName(name);
			result = "success to set name,the value is: "+userService.getName();
		}else{
			result = userService.myToString();
		}
		
		return result;
	}

  

  3、运行程序,并按步骤调用读写操作。

    3.1  写操作

  

    3.2 读操作

  

实验结论:

  IOC的任务就是创建对象,创建的是公用对象,是单例对象,一次创建,到处使用。

  个人觉得,在对象创建这一方面,ioc就是一个单例工具,作用是让程序员不会再在Controller里面到处new Service对象,集中管理,统一分配,减少内存开销。

  

猜你喜欢

转载自www.cnblogs.com/wyongbo/p/spring_ioc_test1.html