1. 程式人生 > 實用技巧 >spring_xml配置&依賴注入

spring_xml配置&依賴注入

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 空格提示屬性,尖括號提示標籤