spring IOC簡単応用(一)
一、IOCの強み
1、本来はアプリケーションによって管理されているオブジェクト間の依存関係ですが、現在は容器に任せて管理しています.
2、大量に工場類と単列類の数量を減らしました.コードのレベルがより明確になりました.
3、軽量級の容器で、侵入性がない.
二、注入方式(常用)
1、コンストラクタ注入
1、springが持つ属性タイプの転換(intを含む. ストリングス リスト セット map )
Date
(カスタムの引き継ぎが必要です.
ProptyEditors Support
)書き換える
set AsText
()方法
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は自動的に対応するタイプの変換を探して日付を変換します.