自己模拟一个简易的spring框架

本例子主要模拟的是Spring的IOC功能,不含AOP

首先定义例子用到的entity,dao,service包下的类


Student类

public class Student {
	private int id;
	private String name;
	private int age;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
}

StudentDaoImpl类

public class StudentDaoImpl implements StudentDao {

	@Override
	public void add(Student stus) {
		System.out.println("学生保存成功");
	}

}


StudentServiceImpl类

public class StudentServiceImpl implements StudentService {
	
	private StudentDao sdao;
	
	
	public void setStudao(StudentDao sdao) {
		this.sdao = sdao;
	}


	@Override
	public void add(Student stu) {
		sdao.add(stu);
	}

}


ClassPathXmlApplicationContext容器类

public class ClassPathXmlApplicationContext implements BeanFactory {

	private Map<String,Object> beans=new HashMap<String,Object>();
	
	
	public ClassPathXmlApplicationContext() throws Exception, IOException {
		SAXBuilder sb=new SAXBuilder();
		Document doc=sb.build(this.getClass().getClassLoader().getResourceAsStream("beans.xml"));
		Element root=doc.getRootElement();
		List list=root.getChildren("bean");
		for(int i=0;i<list.size();i++){
			Element ele=(Element) list.get(i);
			String id=ele.getAttributeValue("id");
			String clazz=ele.getAttributeValue("class");
			Object o=Class.forName(clazz).newInstance();
			
			beans.put(id, o);
			
			for(Element proele:(List<Element>)ele.getChildren("property")){
				String name =proele.getAttributeValue("name");
				String bean=proele.getAttributeValue("bean");
				Object beanObject=beans.get(bean);
				String methodName="set"+name.substring(0,1).toUpperCase()+name.substring(1);
				System.out.println("method name = " + methodName);
				Method m=o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]);
				m.invoke(o, beanObject);
			}
		}
	}


	@Override
	public Object getBean(String id) {

		return beans.get(id);
	}

}


beans.xml

<beans>
	<bean id="studao" class="com.wulijian.daoImpl.StudentDaoImpl"/>

	<bean id="stuService" class="com.wulijian.ServiceImpl.StudentServiceImpl">
		<property name="studao" bean="studao"/>
	</bean>
</beans>



测试类

public class Test {

	public static void main(String[] args) throws IOException, Exception {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext();  
		Student stu = new Student();  
		StudentService service = (StudentService) context.getBean("stuService");  
		service.add(stu);  

	}

}




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值