自己模拟一个简易的spring框架
来源:互联网 发布:pc摄像机软件 编辑:程序博客网 时间:2024/04/29 21:30
本例子主要模拟的是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 {@Overridepublic void add(Student stus) {System.out.println("学生保存成功");}}
StudentServiceImpl类
public class StudentServiceImpl implements StudentService {private StudentDao sdao;public void setStudao(StudentDao sdao) {this.sdao = sdao;}@Overridepublic 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);}}}@Overridepublic 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
- 自己模拟一个简易的spring框架
- 自己实现的一个简易Spring框架(IoC+AOP)
- 实现一个简易的IoC框架(上)(此篇与Spring.NET无关,为自己手写IoC框架)
- 模拟Spring IOC的简易实现
- 简易Mvp+RxJava2+Retrofit2 搭建一个属于自己的开发框架
- 自己开发一个简单的mvc框架(类似spring mvc)
- php模拟一个简易的mvc模型
- 自己写的一个简易播放器
- 自己写一个简易的string类型
- 自己实现一个简易的SpringMVC
- 最简易的spring框架的搭建
- Spring.NET学习笔记3——实现一个简易的IoC框架(练习篇)
- Spring.NET学习笔记3——实现一个简易的IoC框架(练习篇)
- 制作一个简易的PHP框架
- 使用过滤器+反射+枚举,简单模拟sturts2运行方式,编写一个属于自己的框架
- 模拟spring,写自己的IOC
- 深入分析JavaWeb Item33 -- 开发自己简易的JDBC框架
- 深入分析JavaWeb 33 -- 开发自己简易的JDBC框架
- 4js函数
- 杭电1012求e
- 小明の魔法计划
- Linux 自带编辑器 vi
- java—模拟银行账户业务—类的带参方法
- 自己模拟一个简易的spring框架
- HDU 2222 AC自动机 模板
- 我的第一篇博客
- 各种同步方法性能比较(synchronized ReentrantLock Atomic)
- codeforces 7C Line 扩展欧几里德 Java
- 摄像头识别手写数字
- 生成,使用jar包
- ROS机器人Diego 1# 利用人工智能 风格迁移技术拍摄不同画风的视频
- Hibernate中的cascade级联属性一对多多对一的增删改过程探讨