spring IOC簡単応用(一)


一、IOCの強み
    1、本来はアプリケーションによって管理されているオブジェクト間の依存関係ですが、現在は容器に任せて管理しています.
     2、大量に工場類と単列類の数量を減らしました.コードのレベルがより明確になりました.
     3、軽量級の容器で、侵入性がない.
二、注入方式(常用)
    1、コンストラクタ注入
public class UserServiceImpl implements UserService
{
	private UserDao dao;
	
	public UserServiceImpl()
	{}
	
	public UserServiceImpl(UserDao dao)
	{
		this.dao = dao;
	}

	public void addUser(String name, String pass)
	{
		this.dao.addUser(name, pass);
	}
}
  2、springの配置ファイルaplication Contect.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean id="userDao4MySql" class="com.liusheng.dao.impl.MySqlDaoImpl"></bean>
    <bean id="userDao4Oracle" class="com.liusheng.dao.impl.OracleDaoImpl"></bean>
    <bean id="userService" class="com.liusheng.service.impl.UserServiceImpl">
       <!--        -->
       <constructor-arg index="0" ref="userDao4MySql">
       </constructor-arg>
    </bean>
</beans>
  3、javaアプリケーションクライアントの呼び出しコード
public class Client
{
	public static void main(String[] args)
	{
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService service = (UserService)context.getBean("userService");
        service.addUser("zhangsan", "lisi");
	}
}
  2、セットメソッド注入      
public class UserServiceImpl implements UserService
{
	private UserDao dao;

	public void addUser(String name, String pass)
	{
		this.dao.addUser(name, pass);
	}

	public UserDao getDao()
	{
		return dao;
	}

	public void setDao(UserDao dao)
	{
		this.dao = dao;
	}
}
   2、springの配置ファイルaplication Contect.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean id="userDao4MySql" class="com.liusheng.dao.impl.MySqlDaoImpl"></bean>
    <bean id="userDao4Oracle" class="com.liusheng.dao.impl.OracleDaoImpl"></bean>
     <bean id="userService2" class="com.liusheng.service.impl.UserServiceImpl">
       <!-- setter     -->
       <property name="dao" ref="userDao4Oracle"></property>
    </bean>
 </beans>
  3、javaアプリケーションクライアントの呼び出しコード
public class Client
{
	public static void main(String[] args)
	{
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService service = (UserService)context.getBean("userService2");
        service.addUser("zhangsan", "lisi");
	}
}
 3、常用属性注入
     1、springが持つ属性タイプの転換(intを含む. ストリングス リスト セット  map )
public class Bean
{
	private String strValue;
	private int intValue;
	private List listValue;
	private Set setValue;
	private String[] arrayValue;
	private Map mapValue;
	//...setter/getter...
}
               springプロファイルの注入
<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    
    <!--         -->
    <bean id="bean" class="com.liusheng.clientr.Bean">
        <!-- setter     -->
        <property name="strValue" value="hello_world"></property>
        <property name="intValue" value="123"></property>
        <property name="listValue">
           <list>
              <value>123</value>
              <ref local="userDao4MySql"/>
           </list>
        </property>
        <property name="setValue">
            <set>
                <ref local="userDao4Oracle"/>
                <value>121212</value>
            </set>
        </property>
        <property name="arrayValue">
           <list>
              <value>111</value>
           <value>222</value>
           <value>333</value>
           </list>
        </property>
        <property name="mapValue">
           <map>
              <entry key="1" value="111"></entry>
              <entry key="2" value="222"></entry>
              <entry key="3" value="333"></entry>
           </map>
        </property>
    </bean>
</beans>
  2、springはDateタイプの属性変換ができません.カスタム属性タイプ変換器が必要です. もう、 カスタム属性エディタ:
Date
(カスタムの引き継ぎが必要です.
ProptyEditors Support
)書き換える
set AsText
()方法
/**
 * spring                ,    
 *            。
 */
public class UtilDatePropertyEditor extends PropertyEditorSupport
{
	public void setAsText(String text) throws IllegalArgumentException
	{
		try
		{
			Date date = new SimpleDateFormat("yyyy-mm-dd").parse(text);
			this.setValue(date);
		} catch (ParseException e)
		{
			e.printStackTrace();
		}
	}
}
       この変換器をプロパティファイルに配置します.
<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    
    <!--         -->
    <bean id="customEditors" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
       <property name="customEditors">
           <map>
              <entry key="java.util.Date">
                 <bean class="com.liusheng.conversion.UtilDatePropertyEditor"></bean>
              </entry>
           </map>
       </property>
    </bean>
</beans>
     設定ファイルに配置したら、springは自動的に対応するタイプの変換を探して日付を変換します.