• 【开发者笔记】揣摩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对象,集中管理,统一分配,减少内存开销。

      

  • 相关阅读:
    Python基础语法精讲
    使用xlwt 库将数据导入为Excel 表格
    统计指定目录下所有mp4文件的时长(包含子目录下的文件)
    获取一个目录下所有文件(完整路径,要借助os.path.join()方法)
    中国参与MOOC 建设的大学有多少所?
    蒙特卡洛方法应用
    手欠,起了一卦,看那房子的风水,悲剧了
    好无聊,大半夜地找了份传世服务端源码,编着玩
    昨晚房屋的风水
    上午,写了个小东西
  • 原文地址:https://www.cnblogs.com/wyongbo/p/spring_ioc_test1.html
Copyright © 2020-2023  润新知