模拟spring,写自己的IOC
来源:互联网 发布:浪潮软件二级部门 编辑:程序博客网 时间:2024/05/17 01:43
1.项目结构
2.创建:User.java
package com.office.ioc.entity;/** * 用户类 * * @author Administrator 2017-4-27 * */public class User {private int id;private String name;private String address;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 String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "Student [id=" + id + ", name=" + name + ", address=" + address + "]";}}
3.定义接口和实现类:UserDao.java、UserDaoImpl.java、UserService.java、UserServiceImpl.java
UserDao.java
package com.office.ioc.dao;import com.office.ioc.entity.User;public interface UserDao {void add(User user);}
UserDaoImpl.java
package com.office.ioc.dao.impl;import com.office.ioc.dao.UserDao;import com.office.ioc.entity.User;public class UserDaoImpl implements UserDao {public void add(User user) {System.out.println("user is saved !");}}
UserService.java
package com.office.ioc.service;import com.office.ioc.entity.User;public interface UserService {void add(User user);}
UserServiceImpl.java(注意getter、setter方法)
package com.office.ioc.service.impl;import com.office.ioc.dao.UserDao;import com.office.ioc.entity.User;import com.office.ioc.service.UserService;public class UserServiceImpl implements UserService {private UserDao userDao;public UserDao getUserDao() {return userDao;}public void setUserDao(UserDao userDao) {this.userDao = userDao;}public void add(User user) {userDao.add(user);}}
4.通过maven引入:dom4j.jar
<dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency>
5.定义xml:ioc-beans.xml
<?xml version="1.0" encoding="UTF-8"?><beans><bean id="userDao" class="com.office.ioc.dao.impl.UserDaoImpl"/><bean id="userService" class="com.office.ioc.service.impl.UserServiceImpl"><property name="userDao" bean="userDao"/></bean></beans>
BeanFactory.java
package com.office.ioc.core;public interface BeanFactory {Object getBean(String id);}
ClassPathXmlApplicationContext.java
package com.office.ioc.core.impl;import java.lang.reflect.Method;import java.util.HashMap;import java.util.List;import java.util.Map;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;import com.office.ioc.core.BeanFactory;@SuppressWarnings("unchecked")public class ClassPathXmlApplicationContext implements BeanFactory {private Map<String, Object> beans = new HashMap<String, Object>();private String configLocation="application.xml";public ClassPathXmlApplicationContext(String configLocation)throws Exception{this.configLocation=configLocation;setConfigLocation(getDocument());}public ClassPathXmlApplicationContext() throws Exception {setConfigLocation(getDocument());}public Document getDocument() throws Exception{SAXReader sr = new SAXReader();return sr.read(sr.getClass().getClassLoader().getResourceAsStream(configLocation));// 构造文档对象}public void setConfigLocation(Document document) throws Exception{Element root = document.getRootElement();// 获取根元素HDList<Element> list = root.elements("bean");// 获取名字为bean的所有元素for (Element element : list) {String id = element.attributeValue("id");String clazz = element.attributeValue("class");Object object = Class.forName(clazz).newInstance();System.out.println("bean id is " + id + ", class is " + clazz);beans.put(id, object);// 遍历所有的propertyfor (Element property : (List<Element>) element.elements("property")) {String name = property.attributeValue("name");String bean = property.attributeValue("bean");Object beanObject = beans.get(bean);// 构造setter方法String methodName = "set" + name.substring(0, 1).toUpperCase() + name.substring(1);System.out.println("setter method name = " + methodName);Method m = object.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]);m.invoke(object, beanObject);}}}public Object getBean(String id) {return beans.get(id);}}
7.编写测试类:
package com.office.ioc;import com.office.ioc.core.impl.ClassPathXmlApplicationContext;import com.office.ioc.entity.User;import com.office.ioc.service.UserService;public class Main {public static void main(String[] args) throws Exception {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("ioc-beans.xml");User student=new User();UserService service=(UserService)context.getBean("userService");service.add(student);}}
0 0
- 模拟spring,写自己的IOC
- 模拟spring的IOC
- 模拟Spring的Ioc
- 自己写的一个迷你版spring IoC
- 自己写一个简单的Spring IOC容器
- Spring IoC的模拟实现
- 自己动手模拟spring的IOC
- 简单模拟 Spring 的 ioc
- 写一个自己的Spring框架——简单实现IoC容器功能
- spring的IOC和aop模拟
- 简单代码 模拟 spring的IOC机制
- javaSE 模拟Spring框架的Ioc
- 模拟Spring IOC的简易实现
- 自己实现的Spring IOC容器
- 自己实现简单的Spring IOC
- 自己简单实现Spring的IOC原理
- Spring模拟(DI,IOC)
- spring ioc 模拟
- 1549 水王争霸
- Linux Redis-Cluster集群搭建与使用
- 发现一个特别小巧的jquery插件可以在选择的时候显示小图
- springboot logback日志配置
- 【多媒体封装格式详解】---MKV【1】
- 模拟spring,写自己的IOC
- DigitalClock---TextClock---AnalogClock---Chronometer---程序退出保持后台运行设置
- 今天是个数据日 外汇市场高潮不断,你准备好了吗?
- 开源GIS软件初探
- 【多媒体封装格式详解】---MKV【3】完
- xargs
- Accumarray函数在c++中的实现
- GPUImage 报错reason: 'Incomplete filter FBO: 36055'
- hdu 2089 不要62(数位dp)暴力