模拟bean工厂基础版
实体类
bean标记类
工厂类
测试类
1、需要组装的实体
package com.myspring.beans;
public class Teacher {
private String tname;
public String getTname() {
return tname;
}
public void setTname(String tname) {
this.tname = tname;
}
}
2、bean标记、 相当于xml
public class BeanDefined {
private String beanId;
private String classPath;
public String getBeanId() {
return beanId;
}
public void setBeanId(String beanId) {
this.beanId = beanId;
}
public String getClassPath() {
return classPath;
}
public void setClassPath(String classPath) {
this.classPath = classPath;
}
}
3、bean工厂:
import java.util.List;
public class BeanFactory {
private List<BeanDefined> beanDefinedList;
public List<BeanDefined> getBeanDefinedList() {
return beanDefinedList;
}
public void setBeanDefinedList(List<BeanDefined> beanDefinedList) {
this.beanDefinedList = beanDefinedList;
}
public Object getBean(String beanId) throws Exception{
Object instance;
for(BeanDefined beanObj:beanDefinedList){
if(beanId.equals(beanObj.getBeanId())){
String classPath = beanObj.getClassPath();
Class classFile= Class.forName(classPath);
//在默认情况下,Spring工厂是通过调用当前类默认工作方法创建实例对象
instance= classFile.newInstance();
return instance;
}
}
return null;
}
}
4、测试程序
public class TestMain {
public static void main(String[] args) throws Exception {
//1.声明注册bean
BeanDefined beanObj = new BeanDefined();
beanObj.setBeanId("teacher");
beanObj.setClassPath("com.myspring.beans.Teacher");
List beanList = new ArrayList();
beanList.add(beanObj);//spring核心配置
//2.声明一个Spring提供BeanFacotory
BeanFactory factory = new BeanFactory();
factory.setBeanDefinedList(beanList);
//3.开发人员向BeanFactory要实例对象.
Teacher t= (Teacher) factory.getBean("teacher");
System.out.println(t);
}
}