1、写配置文件panda.properties
tip:Properties 底层是map,key-value形式存值
pandaService=com.panda.service.impl.PandaServiceImpl
pandaDao=com.panda.dao.impl.PandaDaoImpl
pandaController=com.panda.controller.PandaController
2、bean工厂初始化读取配置文件加载类放到map
//解析配置文件
static Map<String,String> mapping = new HashMap<>();
//静态初始化
static{
//得到文件流
InputStream is = BeanFactory.class.getResourceAsStream("/com/resource/panda.properties");
//读取
Properties properties = new Properties();
try {
// 加载类到properties
properties.load(is);
//遍历 放到mapping
for(Map.Entry entry :properties.entrySet()){
mapping.put(entry.getKey().toString(),entry.getValue().toString());
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("读取配置文件,加载类异常。。");
}
}
3、写工厂创建对象方法
//方法四 通过全限定名反射获取对象
public static<T> T getBean3(String key){
T t = null;
try {
//map - 取全路径
String path = mapping.get(key);
Class<?> forName = Class.forName(path);
t = (T)forName.newInstance();
}catch (Exception e){
e.printStackTrace();
}
return t;
}
4、工厂准备完毕,开始测试
one、准备mvc模式的包、类

two 、源码:
entity: Pandaa.java
package com.panda.entity;
public class Pandaa {
public Integer id;
public String name;
public String address;
public Pandaa(Integer id, String name, String address) {
this.id = id;
this.name = name;
this.address = address;
}
public void setId(Integer id){
this.id = id;
}
public Integer getId(){
return id;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAddress(String address){
this.address = address;
}
public String getAddress(){
return address;
}
}
dao 层:PandaDao 接口、PandaDaoImpl 实现
package com.panda.dao;
import com.panda.entity.Pandaa;
public interface PandaDao {
public Pandaa queryById(Integer id);
}
package com.panda.dao.impl;
import com.panda.dao.PandaDao;
import com.panda.entity.Pandaa;
public class PandaDaoImpl implements PandaDao {
@Override
public Pandaa queryById(Integer id) {
Pandaa panda = null;
switch (id){
case 1:
panda = new Pandaa(1,"pandaa","地球");
break;
case 2:
panda = new Pandaa(2,"pandab","月球");
break;
case 3:
panda = new Pandaa(3,"pandac","火星");
break;
default:
break;
}
return panda;
}
}
service层:PandaService接口、PandaServiceImpl 实现
package com.panda.service;
import com.panda.entity.Pandaa;
public interface PandaService {
public Pandaa queryById(Integer id);
}
package com.panda.service.impl;
import com.panda.dao.PandaDao;
import com.panda.dao.impl.PandaDaoImpl;
import com.panda.entity.Pandaa;
import com.panda.factory.BeanFactory;
import com.panda.service.PandaService;
public class PandaServiceImpl implements PandaService{
//private PandaDaoImpl pandaDao = BeanFactory.getBean(PandaDaoImpl.class);
//private PandaDaoImpl pandaDao = BeanFactory.getBean2("com.panda.dao.impl.PandaDaoImpl");
private PandaDaoImpl pandaDao= BeanFactory.getBean3("pandaDao");
@Override
public Pandaa queryById(Integer id) {
return pandaDao.queryById(id);
}
}
controller层:PandaController
package com.panda.controller;
import com.panda.entity.Pandaa;
import com.panda.factory.BeanFactory;
import com.panda.factory.PandaFactory;
import com.panda.service.PandaService;
import com.panda.service.impl.PandaServiceImpl;
public class PandaController {
//private PandaService pandaService = PandaFactory.getPandaService();
/*private PandaService pandaService;
{
// pandaService = BeanFactory.getBean(PandaService.class);
pandaService = BeanFactory.getBean2("com.panda.service.impl.PandaServiceImpl");
}*/
private PandaService pandaService = BeanFactory.getBean3("pandaService");
public void queryById(){
int id = 1;
Pandaa pandaa = pandaService.queryById(id);
System.out.println("恭喜你。。"+pandaa.getName());
}
}
5、单元测试
package com.panda.test;
import com.panda.controller.PandaController;
import com.panda.factory.BeanFactory;
import com.panda.factory.PandaFactory;
public class TestPanda {
public static void main(String[] args) {
//PandaController pandaController = PandaFactory.getPandaController();
PandaController pandaController = null;
//pandaController = BeanFactory.getBean(PandaController.class);
//pandaController = BeanFactory.getBean2("com.panda.controller.PandaController");
//通过key获取controller对象
pandaController = BeanFactory.getBean3("pandaController");
//调controller中方法
pandaController.queryById();
}
}
6、结果

本文介绍了一个简单的Bean工厂实现过程,包括配置文件定义、类加载、对象创建及MVC模式下的应用示例。

1196

被折叠的 条评论
为什么被折叠?



