• Like
Flex's DI Container
Upcoming SlideShare
Loading in...5
×
Uploaded on

FxUG@富山勉強会

FxUG@富山勉強会

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
2,410
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
20
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Flex’s DI Container 〜DI Container徹底⽐較〜 yone098 Flex3勉強会第73回@北陸 2009‐07‐04
  • 2. ⾃⼰紹介 名前 ⽶林 正明(よねばやし まさあき) ID yone098 所属 T2 Project http://t2framework.org/ 株式会社Abby 代表取締役社⻑ http://www.abby.co.jp Flex3勉強会第73回@北陸 2009‐07‐04
  • 3. ⾃⼰紹介 出⾝ 富⼭県富⼭市 宣伝 絶賛社員募集中(恵⽐寿勤務) 株式会社ヌーラボでも社員募集中 Flex3勉強会第73回@北陸 2009‐07‐04
  • 4. ⾃⼰紹介 Flex歴 Secret OSS T2 Project(ver0.6 AMF) Seasar2, Teeda, S2JSF まとめ I ❤ Toyama Flex3勉強会第73回@北陸 2009‐07‐04
  • 5. Agenda What is DI Container? Flex’s DI Container PranaFramework SpringActionScript SmartyPants IOC swizframework Summary Flex3勉強会第73回@北陸 2009‐07‐04
  • 6. What is DI Container? Flex3勉強会第73回@北陸 2009‐07‐04
  • 7. What’s DI Container? DI Container Dependency Injection 依存性の注⼊ Component管理 newしない ⼤きな連想配列 HashMapのお化けをイメージ Flex3勉強会第73回@北陸 2009‐07‐04
  • 8. What’s DI Container? Java DI Container Seasar2 http://www.seasar.org/ Spring http://www.springsource.org/ Guice http://code.google.com/p/google‐guice/ Flex3勉強会第73回@北陸 2009‐07‐04
  • 9. Flex’s DI Container Flex3勉強会第73回@北陸 2009‐07‐04
  • 10. Flex’s DI Container Flex’s DI Container PranaFramework http://www.pranaframework.org/ SmartyPants IOC http://code.google.com/p/smartypants‐ioc/ swizframework http://code.google.com/p/swizframework/ Japanese container(coming soon) Flex3勉強会第73回@北陸 2009‐07‐04
  • 11. Flex’s DI Container inspired Flex DI Container Java DI Container PranaFramework Spring SmartyPants IOC Guice swizframework Spring Flex3勉強会第73回@北陸 2009‐07‐04
  • 12. Flex’s DI Container License Flex DI Container License PranaFramework ASL2.0 SmartyPants IOC New BSD License swizframework ASL2.0 Flex3勉強会第73回@北陸 2009‐07‐04
  • 13. Prana Framework SpringActionscript Flex3勉強会第73回@北陸 2009‐07‐04
  • 14. SpringActionscript Prana Framework 現在は,SpringExtensionsProject傘下 http://www.springsource.org/extensions/se‐springactionscript‐as Springをinspire Cairngorm, PureMVC拡張⽤のMVCS  architectureのUtility classを含む Model‐View‐Controller‐Service AOP Support(future) Flex3勉強会第73回@北陸 2009‐07‐04
  • 15. break Cairngorm Flex3勉強会第73回@北陸 2009‐07‐04
  • 16. Cairngorm Cairngorm(けあんごーむ) Flex⽤clientサイドフレームワーク http://opensource.adobe.com/wiki/display/cairngorm/Cairngorm View (mxmlからイベンドドリブンでViewHelperメソッドをコール) ViewHelper (VOを作成し開発者が定義するイベントを発生させる) ValueObject (画面入力値保持オブジェクト) Controller (イベント処理の受け口) Command (execute/onResult/onFaultを実装) ModelLocator (画面表示用のモデルを保持) BusinessDelegate (RemoteObject/HTTPService/WebService) Services (サービスの一元管理) Flex3勉強会第73回@北陸 2009‐07‐04
  • 17. break PureMVC Flex3勉強会第73回@北陸 2009‐07‐04
  • 18. PureMVC PureMVC Flex⽤clientサイドフレームワーク http://puremvc.org Cairngormの⽋点を⾒直して作られたMVCモデル Model Proxyクラス/ValueObjectクラス View MXML/Mediatorクラス Controller Façadeクラス/Commandクラス Flex3勉強会第73回@北陸 2009‐07‐04
  • 19. back SpringActionscript Flex3勉強会第73回@北陸 2009‐07‐04
  • 20. SpringActionscript build trunk co https://src.springframework.org/svn/se‐springactionscript‐as/spring‐actionscript/trunk mvn install(maven2 installed) MAVEN_OPTS=‐Xmx1024m pom.xmlの修正 <dependency> <groupId>com.adobe.flexunit</groupId> <artifactId>flexunit</artifactId> <version>0.90</version><!‐‐0.9はリポジトリには存在しない‐‐> <type>swc</type> </dependency> Flex3勉強会第73回@北陸 2009‐07‐04
  • 21. SpringActionscript dependency 依存ライブラリを追加 Dependency library as3commons‐lang.swc download as3commons‐logging.swc download as3commons‐reflect.swc download flexunit.swc download Spring‐actionscript.swc mvn installで生成 Flex3勉強会第73回@北陸 2009‐07‐04
  • 22. build ok SpringActionscript Flex3勉強会第73回@北陸 2009‐07‐04
  • 23. break Flex with maven2 Flex3勉強会第73回@北陸 2009‐07‐04
  • 24. flex with maven2 flexmojos Flex maven2 project http://blog.flex‐mojos.info/ <repository> <id>flex‐mojos‐repository</id> <url>http://repository.sonatype.org/content/groups/flexgroup</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> Flex3勉強会第73回@北陸 2009‐07‐04
  • 25. flex with maven2 AS3Commons Project http://www.as3commons.org/ AS3Commons Reflect reflection API for ActionScript3.0 Flash/Flex/AIR http://www.as3commons.org/as3‐commons‐logging/ AS3Commons Logging reflection API for ActionScript3.0 http://www.as3commons.org/as3‐commons‐reflect/ Flex3勉強会第73回@北陸 2009‐07‐04
  • 26. flex with maven2 AS3Commons Reflect Dependencies GroupId ArtifactId type com.adobe.flex.framework Flex‐framework pom com.adobe.flex.unit flexunit swc org.as3commons as3commons‐logging swc org.sonatype.flexmojos Flexmojos‐unittest‐support swc Flex3勉強会第73回@北陸 2009‐07‐04
  • 27. back SpringActionscript Flex3勉強会第73回@北陸 2009‐07‐04
  • 28. SpringActionscript Getting Started Simple example Step1 Flex3勉強会第73回@北陸 2009‐07‐04
  • 29. SpringActionscript applicationContext.xml Regist component <?xml version="1.0"?> <objects xmlns="http://www.pranaframework.org/objects" xmlns:xsi="http://www.w3.org/2001/XMLSchema‐instance" xsi:schemaLocation="http://www.pranaframework.org/objects http://www.pranaframework.org/schema/objects/prana‐objects‐0.6.xsd"> <object id="singletonBean" class="yone098.samples.SingletonClass" scope="singleton" /> <object id="prototypeBean“ class="yone098.samples.PrototypeClass" scope="prototype" /> <object id="calc" class="yone098.samples.CalcAdd" /> </objects> Flex3勉強会第73回@北陸 2009‐07‐04
  • 30. SpringActionscript scope prototype getObject毎にinstance⽣成 objectタグで指定 <object scope=“prototype” … singleton(default) 何度getObjectしても同じinstance objectタグで指定 <object scope=“singleton” … Flex3勉強会第73回@北陸 2009‐07‐04
  • 31. SpringActionscript Getting Started Simple example Step2 Flex3勉強会第73回@北陸 2009‐07‐04
  • 32. SpringActionscript load config and lookup dependency private var _appContext:XMLApplicationContext; private function onCreationComplete():void { _appContext= new XMLApplicationContext("applicationContext.xml"); _appContext.addEventListener(Event.COMPLETE,  onApplicationContextComplete); // listen complete _appContext.load(); // load } private function onApplicationContextComplete(event:Event):void { var bean1:SingletonClass = _appContext.getObject("singletonBean"); var bean2:SingletonClass = _appContext.getObject("singletonBean"); } Flex3勉強会第73回@北陸 2009‐07‐04
  • 33. SpringActionscript applicationContext.xml <object> <property> <ref> <constructor‐arg> <arg> <method‐invocation> <param> Flex3勉強会第73回@北陸 2009‐07‐04
  • 34. SpringActionscript Tips1 applicationContext.xmlにBeanを定義しただ けではswfにclass情報は埋め込まれない為に, 明⽰的にclassを宣⾔するか,cssにclass情報を 設定しないと実⾏時にエラー。 特にinterfaceでgetObjectする際は注意 // 明⽰的に実装クラスを宣⾔しておく private var _includeClasses:Array = [CalcAdd, CalcMinus]; Flex3勉強会第73回@北陸 2009‐07‐04
  • 35. SpringActionscript Tips2 明⽰的に宣⾔すると設定ファイルのみ書き換え て実装classの切り替えが出来ない>< 新しい実装クラスの度にコンパイル CSSを利⽤する ClassReference /** bean情報をcssに */ .prana { bean1:ClassReference("yone098.samples.CalcAdd"); bean2:ClassReference("yone098.samples.CalcMinus"); } Flex3勉強会第73回@北陸 2009‐07‐04
  • 36. SpringActionscript Tips3 同⼀idでBeanを登録した場合,後の登録が有効 登録してもエラーにはならない applicationContext.xml <object id="calc" class="yone098.samples.CalcMinus" /> <object id="calc" class="yone098.samples.CalcAdd" /> main.mxml // id=calcをgetObjectするとCalcAdd var calc:ICalc = _appContext.getObject("calc"); Flex3勉強会第73回@北陸 2009‐07‐04
  • 37. SpringActionscript demo with remoteObject AMFsample Flex3勉強会第73回@北陸 2009‐07‐04
  • 38. SmartyPanth IOC Flex3勉強会第73回@北陸 2009‐07‐04
  • 39. SmartyPants IOC SmartyPants IOC googleCodeで開発 http://code.google.com/p/smartypants‐ioc/ Guiceをinspire ⽇本語では 嫌味なやーつ 依存ライブラリ無し 設定ファイル無し AOP Support無し Flex3勉強会第73回@北陸 2009‐07‐04
  • 40. SmartyPants IOC dependency 依存ライブラリ無し library SmartyPantsIOC.swc サイトからdownload 使⽤したいprojectのライブラリに追加するだけ Flex3勉強会第73回@北陸 2009‐07‐04
  • 41. SmartyPants IOC build ok SmartyPants IOC Flex3勉強会第73回@北陸 2009‐07‐04
  • 42. SmartyPants IOC Getting Started Simple example Step1 Flex3勉強会第73回@北陸 2009‐07‐04
  • 43. SmartyPants IOC create Injector & lookup dependency private var _injector:Injector; private function onCreationComplete():void { // setup injector _injector = SmartyPants.getOrCreateInjectorFor(this); } private function sample():void { var bean1:SingletonClass = _injector.newRequest(this) .forClass(SingletonClass).getInstance(); var bean2:SingletonClass = _injector.newRequest(this) .forClass(SingletonClass).getInstance(); } Flex3勉強会第73回@北陸 2009‐07‐04
  • 44. SmartyPants IOC inject [Inject]メタデータタグで指定 Guiceの@Inject GuiceのModule=getInjectorに渡すinstace [Inject] public class InjectTest Flex3勉強会第73回@北陸 2009‐07‐04
  • 45. SmartyPants IOC Class Binding newRule().whenAskedFor useClass named(“xx”).useClass useSingletonOf // interfaceの実装をCalcAddに _injector.newRule().whenAskedFor(ICalc).useClass(CalcAdd); // “calc”という名前でBinding _injector.newRule().whenAskedFor(ICalc).named("calc").useClass(CalcAdd); // singleton _injector.newRule().whenAskedFor(ICalc).useSingletonOf(CalcAdd); Flex3勉強会第73回@北陸 2009‐07‐04
  • 46. SmartyPants IOC Class Binding Tips1 namedでclass bindingしたinterfaceは,  getInstanceの際にbindしたnamed指定で取得 しないとエラー。 // namedで”foo”指定でbind _injector.newRule().whenAskedFor(ICalc).named("foo").useClass(CalcAdd); // bindした名前と異なるのでエラー var calc:ICalc =  _injector.newRequest(this).forClass(ICalc).named(“abc").getInstance(); // 名前を指定しないとエラー var calc:ICalc =  _injector.newRequest(this).forClass(ICalc).getInstance(); // 正しくgetInstance可能 _injector.newRequest(this).forClass(ICalc).named("foo").getInstance(); Flex3勉強会第73回@北陸 2009‐07‐04
  • 47. SmartyPants IOC Class Binding Tips2 同⼀interfaceで複数実装classを登録した場合, 後の登録が有効 登録してもエラーにはならない // 同⼀interfaceでnamed指定無しで複数登録 _injector.newRule().whenAskedFor(ICalc).useClass(CalcAdd); _injector.newRule().whenAskedFor(ICalc).useClass(CalcMinus); // getInstance => CalcMinus var calc:ICalc = _injector.newRequest(this).forClass(ICalc).getInstance(); Flex3勉強会第73回@北陸 2009‐07‐04
  • 48. SmartyPants IOC Provider Binding useProvider Rule Binding useRuleFor(interface, “named”) Live rules [Bindable]メタデータタグ useBindableProperty(obj,“propertyName”) Flex3勉強会第73回@北陸 2009‐07‐04
  • 49. SmartyPants IOC scope prototype(default) getInstance毎にinstance⽣成 singleton 何度getInstanceしても同じinstance [Singleton]メタデータタグで指定 [Singleton] public class SingletonClass Flex3勉強会第73回@北陸 2009‐07‐04
  • 50. SmartyPants IOC Issue Constructor injectionは未実装 My Issue Provider Rule Binding Flex3勉強会第73回@北陸 2009‐07‐04
  • 51. SmartyPants IOC demo with remoteObject AMFsample Flex3勉強会第73回@北陸 2009‐07‐04
  • 52. swizframework Flex3勉強会第73回@北陸 2009‐07‐04
  • 53. swizframework swizframework googleCodeで開発 http://code.google.com/p/swizframework/ Springをinspire(Autowire) Flex4対応 依存ライブラリ無し 設定ファイルはmxml AOP Support無し Flex3勉強会第73回@北陸 2009‐07‐04
  • 54. swizframework build trunk/branches 0.6.2 Flex4が必須 branches 0.6.1 co mvn install(maven2 installed) 特に問題なくbuild可能 Flex3勉強会第73回@北陸 2009‐07‐04
  • 55. swizframework dependency 依存ライブラリ無し library swiz‐0.6.1.swc mvn installで⽣成 swiz‐0.6.2.swc サイトからdownload 使⽤したいprojectのライブラリに追加するだけ ソースを修正したい場合は、mvnで構築しても良い Flex3勉強会第73回@北陸 2009‐07‐04
  • 56. swizframework build ok swizframework Flex3勉強会第73回@北陸 2009‐07‐04
  • 57. swizframework Getting Started Simple example Step1 Flex3勉強会第73回@北陸 2009‐07‐04
  • 58. swizframework Beans.xml Regist component <?xml version="1.0" encoding="utf‐8"?> <BeanLoader xmlns:component="yone098.samples.*" xmlns:mx="http://www.adobe.com/2006/mxml"> <component:Sample1 id="sample1"/> <component:Sample2 id="sample2"/> </BeanLoader> Flex3勉強会第73回@北陸 2009‐07‐04
  • 59. swizframework scope prototype getBean毎にinstance⽣成 factory:Prototypeのsingleton属性で指定 <factory:Prototype singleton=“false” class=“… singleton(default) 何度getBeanしても同じinstance 何も指定しない(default) factory:Prototypeのsingleton属性で指定 <factory:Prototype singleton=“true” class=“… Flex3勉強会第73回@北陸 2009‐07‐04
  • 60. swizframework Getting Started Simple example Step2 Flex3勉強会第73回@北陸 2009‐07‐04
  • 61. swizframework load config and lookup dependency private function sample():void { // load config Swiz.loadBeans([Beans]); // getBean var bean1:Sample1 =  Swiz.getBean("sample1") as Sample1; } Flex3勉強会第73回@北陸 2009‐07‐04
  • 62. swizframework inject [Autowire]メタデータタグで指定 同⼀interfaceで複数登録時は,id指定 [Autowire] public class InjectTest [Autowire(bean=“calcAdd”)] public var _calc:ICalc; Flex3勉強会第73回@北陸 2009‐07‐04
  • 63. swizframework My Issue Swiz Controller Event Handling with CentralDispatcher DynamicMediators Flex3勉強会第73回@北陸 2009‐07‐04
  • 64. swizframework demo with remoteObject AMFsample Flex3勉強会第73回@北陸 2009‐07‐04
  • 65. Summary Flex3勉強会第73回@北陸 2009‐07‐04
  • 66. summary get instance DI Container getInstance SpringActionscript getObject(cast無し) SmartyPants IOC getInstance(cast無し) swizframework getBean(cast必要) configration DI Container configration SpringActionscript applicationContext.xml(任意) SmartyPants IOC 無し swizframework mxml Flex3勉強会第73回@北陸 2009‐07‐04
  • 67. summary Default scope DI Container Default scope SpringActionscript singleton SmartyPants IOC prototype swizframework singleton Constructor injection DI Container Constructor injection SpringActionscript constructor‐arg SmartyPants IOC future swizframework 無し Flex3勉強会第73回@北陸 2009‐07‐04
  • 68. Summary俳句 Flex3勉強会第73回@北陸 2009‐07‐04
  • 69. ⼀句 富⼭県 ホームな感じが 好きやちゃあ❤ Flex3勉強会第73回@北陸 2009‐07‐04
  • 70. 謝辞 御清聴 ありがとう ございました Flex3勉強会第73回@北陸 2009‐07‐04