1.项目结构:

          

 

 

2.applicationContext.xml

EmpDao=com.dao.EmpDaoImpl
EmpService=com.service.EmpServiceImpl

3.BeanFactory:

package org.testSpring;

import java.io.InputStream;
import java.util.Properties;
//模拟spring容器创建bean对象 并 在genBean方法中返回bean对象
public class BeanFactory {
	private static Properties prop;
	static{
		try {
			prop=new Properties();
			InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("applicationContext.properties");
			prop.load(in);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static Object getBean(String key){
		Object bean=null;
		try {
			String className=prop.getProperty(key);
			bean=Class.forName(className).newInstance();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return bean;
	}
	
}

    

4.Dao层:

package com.dao;

public interface EmpDao {
	public void findEmps();
}

  

package com.service;

import org.testSpring.BeanFactory;

import com.dao.EmpDao;

public class EmpServiceImpl implements EmpService {
	private EmpDao dao=null;
	public void findAllEmps() {
		dao=(EmpDao) BeanFactory.getBean("EmpDao");
		dao.findEmps();
	}

}

5.service层:

package com.service;

public interface EmpService {
    public void findAllEmps();
}
package com.service;

import org.testSpring.BeanFactory;

import com.dao.EmpDao;

public class EmpServiceImpl implements EmpService {
    private EmpDao dao=null;
    public void findAllEmps() {
        dao=(EmpDao) BeanFactory.getBean("EmpDao");
        dao.findEmps();
    }

}

6.Controller控制层:

package com.controller;

import org.junit.Test;
import org.testSpring.BeanFactory;

import com.service.EmpService;

public class EmpController {
	private EmpService service;
	@Test
	public void testGetEmps(){
		try {
			service = (EmpService) BeanFactory.getBean("EmpService");
			System.out.println("控制层调用service层的findAllEmps方法");
			service.findAllEmps();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

  

 7.BeanFactory的另一个版本

 1 import java.util.HashMap;
 2 import java.util.Map;
 3 class A{
 4     public A() {
 5         System.out.println("A{}");
 6     }
 7 }
 8 class B{
 9     public B() {
10         System.out.println("B{}");
11     }
12 }
13 class ObjectContainer{//思考Spring框架中的对象单例
14     //相当于对象池
15     public static Map<String,Object> objectMap=new HashMap<>();
16     //初始化时向池中存储对象
17     static {
18         objectMap.put("key01", new A());
19         objectMap.put("key02", new B());
20     }
21     //从池中获取对象
22     public static Object get(String key) {
23         return objectMap.get(key);
24     }
25 }
26 
27 public class TestObjectInstance05 {
28     public static void main(String[] args) {
29         Object o1=ObjectContainer.get("key01");
30         Object o2=ObjectContainer.get("key01");
31         System.out.println(o1==o2);
32  
33     }
34 }