T2でコンストラクタインジェクションを使ってみる
コンストラクタインジェクションを実装されたSNAPSHOTが出来たらしいので
さっそく試してみる。
lucy-config.dtdのmethodが#REQUIREDになってたので、
使い方に少し迷ったがテストケースを見たらすんなり解決。
コンストラクタインジェクションの場合は、injectにmethodなどの属性は
いらないみたい。
早速試してみる。
・lucy-config.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE lucy-config PUBLIC "-//LUCY//DTD LUCY//EN" "http://www.lucy.org/dtd/lucy-config.dtd"> <lucy-config> <component name="xaDataSource" class="org.seasar.extension.dbcp.impl.XADataSourceImpl"> <inject method="setDriverClassName">"org.h2.Driver"</inject> <inject method="setURL">t2DbUrl.object</inject> <inject method="setUser">"sa"</inject> <!-- <inject method="setPassword"></inject> --> </component> <component name="t2DbUrl" class="org.t2framework.samples.todo.EmbeddedH2UrlFactoryBean"> <inject method="setUrlSuffix">"/t2db/t2db"</inject> <inject method="setReferenceClassName">"org.t2framework.samples.todo.dbflute.allcommon.Entity"</inject> </component> <component name="connectionPool" class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl"> <destroy method="close" /> <inject method="setTransactionManager">transactionManager</inject> <inject method="setXADataSource">xaDataSource</inject> </component> <component name="transactionManager" class="org.seasar.extension.jta.TransactionManagerImpl"/> <component name="dataSource" class="org.seasar.extension.dbcp.impl.DataSourceImpl"> <inject>connectionPool</inject> </component> <component name="dbfluteInitializer" class="org.t2framework.samples.todo.dbflute.allcommon.DBFluteInitializer"> <inject>xaDataSource</inject> </component> <component name="behaviorCommandInvoker" class="org.t2framework.samples.todo.dbflute.allcommon.bhv.core.BehaviorCommandInvoker"> <inject method="setDataSource">dataSource</inject> <inject method="setBeanMetaDataFactory">beanMetaDataFactory</inject> <inject method="setValueTypeFactory">valueTypeFactory</inject> </component> <component name="invokerAssistant" class="org.t2framework.samples.todo.dbflute.allcommon.ImplementedInvokerAssistant"/> <component name="commonColumnAutoSetupper" class="org.t2framework.samples.todo.dbflute.allcommon.ImplementedCommonColumnAutoSetupper"/> <component name="behaviorSelector" class="org.t2framework.samples.todo.dbflute.allcommon.CacheBehaviorSelector"> <destroy method="destroy" /> </component> <component name="beanMetaDataFactory" class="org.t2framework.samples.todo.dbflute.allcommon.s2dao.BeanMetaDataFactoryExtension"/> <component name="propertyTypeFactoryBuilder" class="org.t2framework.samples.todo.dbflute.allcommon.s2dao.PropertyTypeFactoryBuilderExtension"/> <component name="latestSqlProvider" class="org.t2framework.samples.todo.dbflute.allcommon.s2dao.SqlLogRegistryLatestSqlProvider"/> <component name="annotationReaderFactory" class="org.seasar.dao.impl.AnnotationReaderFactoryImpl"/> <component name="valueTypeFactory" class="org.seasar.dao.impl.ValueTypeFactoryImpl"/> <component name="daoNamingConvention" class="org.seasar.dao.impl.DaoNamingConventionImpl"/> <component name="beanEnhancer" class="org.seasar.dao.impl.NullBeanEnhancer"/> <component name="dtoMetaDataFactory" class="org.seasar.dao.impl.DtoMetaDataFactoryImpl"/> <component name="relationPropertyTypeFactoryBuilder" class="org.seasar.dao.impl.RelationPropertyTypeFactoryBuilderImpl"/> <component name="tableNaming" class="org.seasar.dao.impl.DefaultTableNaming"/> <component name="columnNaming" class="org.seasar.dao.impl.DefaultColumnNaming"/> <component name="procedureMetaDataFactory" class="org.seasar.dao.impl.ProcedureMetaDataFactoryImpl"/> <component name="dbfluteStringClobType" class="org.seasar.extension.jdbc.types.StringClobType"/> <component name="dbfluteBytesOidType" class="org.t2framework.samples.todo.dbflute.allcommon.s2dao.internal.valuetype.InternalBytesOidType" /> <component name="memberBhv" class="org.t2framework.samples.todo.dbflute.exbhv.MemberBhv"/> </lucy-config>
・Lucyでコンポーネントを呼び出すテスト
@SingletonScope public class LucyDBFluteTest extends LucyTestCase { private Lucy lucy; public void setUp() throws Exception { lucy = getLucy(); lucy.load("org/t2framework/samples/lucy/dbflute/config.xml"); } public void testComponent() throws Exception { DataSourceImpl dataSourceImpl = lucy.get("dataSource"); assertNotNull(dataSourceImpl); } }
あっさり成功!!
あとはDBFluteとLucyの連携だー。