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 }
浙公网安备 33010602011771号