一个简单IOC与DI示例
生活随笔
收集整理的這篇文章主要介紹了
一个简单IOC与DI示例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、通過bean工廠實現讀取xml文件,并實例化對象,實現自動注入。 package com.pri.test;import com.pri.factory.BeanFactory;
import com.pri.service.UserService;
import org.junit.Test;public class BeanFactoryTest {@Testpublic void test(){BeanFactory beanFactory = BeanFactory.getBeanFactory();UserService user = (UserService)beanFactory.getBean("user");user.save();}
}
2、xml配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans ><bean id="user" class="com.pri.service.impl.UserServiceImpl01"><property name="name" value="李四"/></bean> </beans>3、實例對象:
package com.pri.service.impl;import com.pri.service.UserService; public class UserServiceImpl01 implements UserService{private String name;public String getName() { return name;}public void setName(String name) { this.name = name;}@Overridepublic void save(){System.out.println("UserService被調用........::"+name);} }4、BeanFactory工廠:
package com.pri.factory;import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class BeanFactory {/*** 私有化構造,禁止以new的方式獲取BeanFactory實例*/private BeanFactory(){}/*** 靜態內部類,保證只有一個BeanFactory*/static class SingleBeanFactory{static BeanFactory BEANFACTORY = new BeanFactory();}/*** 對外提供一個獲取BeanFactory方法* @return*/public static BeanFactory getBeanFactory(){return SingleBeanFactory.BEANFACTORY;}public Object getBean(String id) {try {Element element = getElement(id);String classPath = element.attribute("class").getValue();//根據類的全限定名創建Class對象Class<?> clazz = Class.forName(classPath);//創建實例Object obj = clazz.newInstance();//為bean對象賦值 setAttributeValue(clazz,element,obj);return obj;} catch (Exception e) {e.printStackTrace();return null;}}private Element getElement(String id) throws DocumentException {SAXReader saxReader = new SAXReader();Document document = saxReader.read("src/myconfig.xml");//精確定位到id屬性值為傳入字符串的bean元素return (Element) document.selectSingleNode("//bean[@id='" + id + "']");}private void setAttributeValue(Class<?> clazz, Element element,Object obj) throws IntrospectionException, IllegalAccessException, InvocationTargetException {Element subElement = element.element("property");//使用set方法賦值if (subElement != null) {String name = subElement.attributeValue("name");String valueStr = subElement.attributeValue("value");//創建屬性描述器PropertyDescriptor descriptor = new PropertyDescriptor(name, clazz);//獲取該屬性的修飾符String s = descriptor.getPropertyType().getName();//獲得寫方法Method writeMethod = descriptor.getWriteMethod();//調用寫方法Object value = null;if (s.equalsIgnoreCase("int")){value = Integer.parseInt(valueStr);}else if (s.equalsIgnoreCase("long")){value = Long.parseLong(valueStr);}else if (s.equalsIgnoreCase("short")){value = Short.parseShort(valueStr);}else if (s.equalsIgnoreCase("double")){value = Double.parseDouble(valueStr);}else if (s.equalsIgnoreCase("float")){value = Float.parseFloat(valueStr);}else if (s.equalsIgnoreCase("byte")) {value = Byte.valueOf(valueStr);}else{value = valueStr;}writeMethod.invoke(obj, value);}} }?
轉載于:https://www.cnblogs.com/gdwkong/p/8453159.html
總結
以上是生活随笔為你收集整理的一个简单IOC与DI示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于计算机编码的笔记
- 下一篇: 监督学习——随机梯度下降算法(sgd)和