spring_xml配置&依賴注入
阿新 • • 發佈:2020-09-19
factory原始碼思路
package com.zl.factory; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import java.util.Properties; import java.util.Set; public class BeanFactory { //BeanFactory工廠,讀取配置檔案bean.properties,通過傳入的key=id鍵得到值,通過反射建立物件返回 private static Properties p = new Properties();private static Map<String,Object> beans = new HashMap<String,Object>(); //map ioc容器 static { try { InputStream is = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties"); p.load(is); Set<Object> keySet = p.keySet(); for (Object key : keySet) { String k = key.toString(); String classpath= p.get(k).toString(); Object o = Class.forName(classpath).newInstance(); beans.put(k, o); } } catch (Exception e) { e.printStackTrace(); } } public static Object getBean(String key) { try { //String classpath = p.get(key).toString(); //Object o = Class.forName(classpath).newInstance(); Object o = beans.get(key);return o; } catch (Exception e) { e.printStackTrace(); } return null; } }
配置檔案及依賴注入
id:給物件在容器中提供一個唯一標識。用於獲取物件。 class:指定類的全限定類名。用於反射建立物件。預設情況下呼叫無參建構函式。<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--<bean class="com.zl.service.impl.AccountServiceImpl" id="accountService"></bean>--> <!--<bean class="com.zl.dao.impl.AccountDaoImpl" id="accountDao"></bean>--> <!--<bean class="com.zl.service.impl.AccountServiceImpl" id="accountService" scope="singleton"></bean>--> <!--<bean class="com.zl.service.impl.AccountServiceImpl"--> <!--id="accountService" scope="singleton" init-method="init" destroy-method="destroy"></bean>--> <!--<bean class="com.zl.factory.StaticFactory" factory-method="createObj" id="accountService"></bean>--> <!--<bean class="com.zl.factory.NoStaticFactory" id="factory"/>--> <!--<bean factory-bean="factory" factory-method="createObj" id="accountService"/>--> <!--set方法注入--> <!--property屬性就是通過set方法賦值,name是屬性名字,value是給基本資料型別,字串,包裝類賦值--> <!--<bean class="java.util.Date" id="date"></bean>--> <!--<bean class="com.zl.service.impl.AccountServiceImpl" id="accountService">--> <!--<property name="name" value="fbb"/>--> <!--<property name="age" value="18"/>--> <!--<property name="birthday" ref="date"/>--> <!--</bean>--> <!--constructor-arg 屬性: index:指定引數在建構函式引數列表的索引位置 type:指定引數在建構函式中的資料型別 name:指定引數在建構函式中的名稱 ,用這個找給誰賦值 =======上面三個都是找給誰賦值,下面兩個指的是賦什麼值的============== value:它能賦的值是基本資料型別和String型別 ref:它能賦的值是其他bean型別,也就是說,必須得是在配置檔案中配置過的bean--> <!--構造引數注入--> <!--<bean class="java.util.Date" id="date"></bean>--> <!--<bean class="com.zl.service.impl.AccountServiceImpl" id="accountService">--> <!--name方式--> <!--<constructor-arg name="name" value="fbb"></constructor-arg>--> <!--<constructor-arg name="age" value="18"></constructor-arg>--> <!--<constructor-arg name="birthday" ref="date"></constructor-arg>--> <!--index方式--> <!--<constructor-arg index="0" value="fbb"></constructor-arg>--> <!--<constructor-arg index="1" value="18"></constructor-arg>--> <!--<constructor-arg index="2" ref="date"></constructor-arg>--> <!--type方式--> <!--<constructor-arg type="java.lang.String" value="fbb"></constructor-arg>--> <!--<constructor-arg type="java.lang.Integer" value="18"></constructor-arg>--> <!--<constructor-arg type="java.util.Date" ref="date"></constructor-arg>--> <!--這三種方式可以同時用,注意index位置。一般用name方法--> <!--</bean>--> <!--set方法比構造引數常用--> <!--陣列,鍵值對--> <bean class="com.zl.service.impl.AccountServiceImpl" id="accountService"> <property name="myStrs"> <array> <value>fbb</value> <value>lbb</value> </array> </property> <property name="myList"> <list> <value>fbb</value> <value>"lbb"</value> </list> </property> <property name="mySet"> <set> <value>fbb</value> <value>"lbb"</value> </set> </property> <!--陣列集合都可以用array標籤--> <property name="myMap"> <map> <entry key="fbb" value="123"> </entry> <entry key="lbb"> <value>1234</value> </entry> </map> </property> <property name="myProps"> <map> <entry value="666" key="fbb"/> <entry key="bb"> <value>888</value> </entry> </map> </property> </bean> </beans>
value:它能賦的值是基本資料型別和String型別
idea 空格提示屬性,尖括號提示標籤