SlideShare uma empresa Scribd logo
1 de 70
Baixar para ler offline
Flex’s DI Container
      〜DI Container徹底⽐較〜


                             yone098
Flex3勉強会第73回@北陸 2009‐07‐04
⾃⼰紹介
名前
  ⽶林    正明(よねばやし             まさあき)
ID
  yone098
所属
  T2 Project http://t2framework.org/
  株式会社Abby 代表取締役社⻑
     http://www.abby.co.jp
Flex3勉強会第73回@北陸 2009‐07‐04
⾃⼰紹介

 出⾝
   富⼭県富⼭市
 宣伝
   絶賛社員募集中(恵⽐寿勤務)
   株式会社ヌーラボでも社員募集中




Flex3勉強会第73回@北陸 2009‐07‐04
⾃⼰紹介

 Flex歴
   Secret
 OSS
   T2 Project(ver0.6 AMF)
   Seasar2, Teeda, S2JSF
 まとめ
  I ❤ Toyama

Flex3勉強会第73回@北陸 2009‐07‐04
Agenda
What is DI Container?
Flex’s DI Container
  PranaFramework
    SpringActionScript
  SmartyPants IOC
  swizframework
Summary
Flex3勉強会第73回@北陸 2009‐07‐04
What is DI Container?



Flex3勉強会第73回@北陸 2009‐07‐04
What’s DI Container?
DI Container
  Dependency Injection
    依存性の注⼊
  Component管理
    newしない
  ⼤きな連想配列
    HashMapのお化けをイメージ

Flex3勉強会第73回@北陸 2009‐07‐04
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
Flex’s DI Container



Flex3勉強会第73回@北陸 2009‐07‐04
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
Flex’s DI Container
 inspired
Flex DI Container   Java DI Container
PranaFramework      Spring
SmartyPants IOC     Guice
swizframework       Spring




 Flex3勉強会第73回@北陸 2009‐07‐04
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
Prana Framework
       SpringActionscript



Flex3勉強会第73回@北陸 2009‐07‐04
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
break
              Cairngorm




Flex3勉強会第73回@北陸 2009‐07‐04
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
break
               PureMVC




Flex3勉強会第73回@北陸 2009‐07‐04
PureMVC
PureMVC
  Flex⽤clientサイドフレームワーク
    http://puremvc.org
  Cairngormの⽋点を⾒直して作られたMVCモデル
  Model
     Proxyクラス/ValueObjectクラス
  View
     MXML/Mediatorクラス
  Controller
     Façadeクラス/Commandクラス

Flex3勉強会第73回@北陸 2009‐07‐04
back
         SpringActionscript




Flex3勉強会第73回@北陸 2009‐07‐04
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
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
build ok
         SpringActionscript




Flex3勉強会第73回@北陸 2009‐07‐04
break
          Flex with maven2




Flex3勉強会第73回@北陸 2009‐07‐04
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
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
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
back
         SpringActionscript




Flex3勉強会第73回@北陸 2009‐07‐04
SpringActionscript

Getting Started
  Simple example



             Step1


Flex3勉強会第73回@北陸 2009‐07‐04
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
SpringActionscript

scope
  prototype
    getObject毎にinstance⽣成
    objectタグで指定
     <object scope=“prototype” …
  singleton(default)
    何度getObjectしても同じinstance
    objectタグで指定
     <object scope=“singleton” …



Flex3勉強会第73回@北陸 2009‐07‐04
SpringActionscript

Getting Started
  Simple example



             Step2


Flex3勉強会第73回@北陸 2009‐07‐04
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
SpringActionscript
applicationContext.xml
  <object>
  <property>
  <ref>
  <constructor‐arg>
  <arg>
  <method‐invocation>
  <param>


Flex3勉強会第73回@北陸 2009‐07‐04
SpringActionscript
  Tips1
     applicationContext.xmlにBeanを定義しただ
     けではswfにclass情報は埋め込まれない為に,
     明⽰的にclassを宣⾔するか,cssにclass情報を
     設定しないと実⾏時にエラー。
        特にinterfaceでgetObjectする際は注意
// 明⽰的に実装クラスを宣⾔しておく
private var _includeClasses:Array = [CalcAdd, CalcMinus];




  Flex3勉強会第73回@北陸 2009‐07‐04
SpringActionscript
  Tips2
     明⽰的に宣⾔すると設定ファイルのみ書き換え
     て実装classの切り替えが出来ない><
       新しい実装クラスの度にコンパイル
     CSSを利⽤する
        ClassReference
/** bean情報をcssに */
.prana {
  bean1:ClassReference("yone098.samples.CalcAdd");
  bean2:ClassReference("yone098.samples.CalcMinus");
}

 Flex3勉強会第73回@北陸 2009‐07‐04
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
SpringActionscript

            demo




    with remoteObject AMFsample
Flex3勉強会第73回@北陸 2009‐07‐04
SmartyPanth IOC



Flex3勉強会第73回@北陸 2009‐07‐04
SmartyPants IOC
SmartyPants IOC
  googleCodeで開発
    http://code.google.com/p/smartypants‐ioc/
  Guiceをinspire
  ⽇本語では
    嫌味なやーつ
  依存ライブラリ無し
  設定ファイル無し
  AOP Support無し

Flex3勉強会第73回@北陸 2009‐07‐04
SmartyPants IOC
dependency
  依存ライブラリ無し
 library
 SmartyPantsIOC.swc   サイトからdownload

     使⽤したいprojectのライブラリに追加するだけ




Flex3勉強会第73回@北陸 2009‐07‐04
SmartyPants IOC



            build ok
           SmartyPants IOC




Flex3勉強会第73回@北陸 2009‐07‐04
SmartyPants IOC

Getting Started
  Simple example



             Step1


Flex3勉強会第73回@北陸 2009‐07‐04
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
SmartyPants IOC

 inject
   [Inject]メタデータタグで指定
     Guiceの@Inject
   GuiceのModule=getInjectorに渡すinstace
[Inject]
public class InjectTest




 Flex3勉強会第73回@北陸 2009‐07‐04
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
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
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
SmartyPants IOC

Provider Binding
 useProvider
Rule Binding
 useRuleFor(interface, “named”)
Live rules
 [Bindable]メタデータタグ
 useBindableProperty(obj,“propertyName”)


Flex3勉強会第73回@北陸 2009‐07‐04
SmartyPants IOC

  scope
   prototype(default)
     getInstance毎にinstance⽣成
   singleton
     何度getInstanceしても同じinstance
     [Singleton]メタデータタグで指定

[Singleton]
public class SingletonClass

 Flex3勉強会第73回@北陸 2009‐07‐04
SmartyPants IOC

Issue
  Constructor injectionは未実装


My Issue
  Provider
  Rule Binding




Flex3勉強会第73回@北陸 2009‐07‐04
SmartyPants IOC

            demo




    with remoteObject AMFsample
Flex3勉強会第73回@北陸 2009‐07‐04
swizframework



Flex3勉強会第73回@北陸 2009‐07‐04
swizframework
swizframework
  googleCodeで開発
    http://code.google.com/p/swizframework/
  Springをinspire(Autowire)
  Flex4対応
  依存ライブラリ無し
  設定ファイルはmxml
  AOP Support無し


Flex3勉強会第73回@北陸 2009‐07‐04
swizframework
build
  trunk/branches 0.6.2
    Flex4が必須
  branches 0.6.1 co
    mvn install(maven2 installed)
    特に問題なくbuild可能




Flex3勉強会第73回@北陸 2009‐07‐04
swizframework
dependency
  依存ライブラリ無し
  library
  swiz‐0.6.1.swc   mvn installで⽣成
  swiz‐0.6.2.swc   サイトからdownload

    使⽤したいprojectのライブラリに追加するだけ
    ソースを修正したい場合は、mvnで構築しても良い



Flex3勉強会第73回@北陸 2009‐07‐04
swizframework



            build ok
            swizframework




Flex3勉強会第73回@北陸 2009‐07‐04
swizframework

Getting Started
  Simple example



             Step1


Flex3勉強会第73回@北陸 2009‐07‐04
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
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
swizframework

Getting Started
  Simple example



             Step2


Flex3勉強会第73回@北陸 2009‐07‐04
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
swizframework

 inject
   [Autowire]メタデータタグで指定
     同⼀interfaceで複数登録時は,id指定
[Autowire]
public class InjectTest

[Autowire(bean=“calcAdd”)]
public var _calc:ICalc;

 Flex3勉強会第73回@北陸 2009‐07‐04
swizframework
My Issue
  Swiz Controller
  Event Handling with CentralDispatcher
  DynamicMediators




Flex3勉強会第73回@北陸 2009‐07‐04
swizframework

            demo




    with remoteObject AMFsample
Flex3勉強会第73回@北陸 2009‐07‐04
Summary



Flex3勉強会第73回@北陸 2009‐07‐04
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
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
Summary俳句



Flex3勉強会第73回@北陸 2009‐07‐04
⼀句


富⼭県
ホームな感じが
好きやちゃあ❤

Flex3勉強会第73回@北陸 2009‐07‐04
謝辞



                御清聴
               ありがとう
              ございました

Flex3勉強会第73回@北陸 2009‐07‐04

Mais conteúdo relacionado

Mais procurados

SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsugSpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsugToshiaki Maki
 
Java scriptの進化
Java scriptの進化Java scriptの進化
Java scriptの進化maruyama097
 
WKWebViewとUIWebView
WKWebViewとUIWebViewWKWebViewとUIWebView
WKWebViewとUIWebViewYuki Hirai
 
ReduxとSwiftの組み合わせ:改訂版
ReduxとSwiftの組み合わせ:改訂版ReduxとSwiftの組み合わせ:改訂版
ReduxとSwiftの組み合わせ:改訂版Fumiya Sakai
 
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発Kenjiro Kubota
 
Laravelとテストについて
LaravelとテストについてLaravelとテストについて
LaravelとテストについてTakeo Noda
 
テストゼロからイチに進むための戦略と戦術
テストゼロからイチに進むための戦略と戦術テストゼロからイチに進むための戦略と戦術
テストゼロからイチに進むための戦略と戦術Y Watanabe
 
An Internal of LINQ to Objects
An Internal of LINQ to ObjectsAn Internal of LINQ to Objects
An Internal of LINQ to ObjectsYoshifumi Kawai
 
JavaScript.Next Returns
JavaScript.Next ReturnsJavaScript.Next Returns
JavaScript.Next Returnsdynamis
 
Open Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere LibertyOpen Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere LibertyTakakiyo Tanaka
 
Spring BootでHello Worldのその先へ
Spring BootでHello Worldのその先へSpring BootでHello Worldのその先へ
Spring BootでHello Worldのその先へMasatoshi Fujino
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!Shohei Okada
 
<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー<第1回>Laravelハンズオンセミナー
<第1回>LaravelハンズオンセミナーTatsuyoshi Mashiko
 
React入門-JSONを取得して表示する
React入門-JSONを取得して表示するReact入門-JSONを取得して表示する
React入門-JSONを取得して表示するregret raym
 
LaravelでAPI定義を管理する
LaravelでAPI定義を管理するLaravelでAPI定義を管理する
LaravelでAPI定義を管理するKenjiro Kubota
 
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなしterahide
 
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
.NET最先端技術によるハイパフォーマンスウェブアプリケーション.NET最先端技術によるハイパフォーマンスウェブアプリケーション
.NET最先端技術によるハイパフォーマンスウェブアプリケーションYoshifumi Kawai
 
【Ltech#10】LIFULL HOME'S ネイティブアプリ用APIのデプロイを自動化する
【Ltech#10】LIFULL HOME'S ネイティブアプリ用APIのデプロイを自動化する【Ltech#10】LIFULL HOME'S ネイティブアプリ用APIのデプロイを自動化する
【Ltech#10】LIFULL HOME'S ネイティブアプリ用APIのデプロイを自動化するLIFULL Co., Ltd.
 
linq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScriptlinq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScriptYoshifumi Kawai
 

Mais procurados (20)

SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsugSpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
 
Java scriptの進化
Java scriptの進化Java scriptの進化
Java scriptの進化
 
WKWebViewとUIWebView
WKWebViewとUIWebViewWKWebViewとUIWebView
WKWebViewとUIWebView
 
ReduxとSwiftの組み合わせ:改訂版
ReduxとSwiftの組み合わせ:改訂版ReduxとSwiftの組み合わせ:改訂版
ReduxとSwiftの組み合わせ:改訂版
 
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
 
Laravelとテストについて
LaravelとテストについてLaravelとテストについて
Laravelとテストについて
 
テストゼロからイチに進むための戦略と戦術
テストゼロからイチに進むための戦略と戦術テストゼロからイチに進むための戦略と戦術
テストゼロからイチに進むための戦略と戦術
 
REACT & WEB API
REACT & WEB APIREACT & WEB API
REACT & WEB API
 
An Internal of LINQ to Objects
An Internal of LINQ to ObjectsAn Internal of LINQ to Objects
An Internal of LINQ to Objects
 
JavaScript.Next Returns
JavaScript.Next ReturnsJavaScript.Next Returns
JavaScript.Next Returns
 
Open Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere LibertyOpen Liberty: オープンソースになったWebSphere Liberty
Open Liberty: オープンソースになったWebSphere Liberty
 
Spring BootでHello Worldのその先へ
Spring BootでHello Worldのその先へSpring BootでHello Worldのその先へ
Spring BootでHello Worldのその先へ
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!
 
<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー
 
React入門-JSONを取得して表示する
React入門-JSONを取得して表示するReact入門-JSONを取得して表示する
React入門-JSONを取得して表示する
 
LaravelでAPI定義を管理する
LaravelでAPI定義を管理するLaravelでAPI定義を管理する
LaravelでAPI定義を管理する
 
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
受託開発でテストファーストしたらXXXを早期発見できてハイアジリティになったはなし
 
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
.NET最先端技術によるハイパフォーマンスウェブアプリケーション.NET最先端技術によるハイパフォーマンスウェブアプリケーション
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
 
【Ltech#10】LIFULL HOME'S ネイティブアプリ用APIのデプロイを自動化する
【Ltech#10】LIFULL HOME'S ネイティブアプリ用APIのデプロイを自動化する【Ltech#10】LIFULL HOME'S ネイティブアプリ用APIのデプロイを自動化する
【Ltech#10】LIFULL HOME'S ネイティブアプリ用APIのデプロイを自動化する
 
linq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScriptlinq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScript
 

Destaque

SPBNET Intranet Sapphire CMF
SPBNET Intranet Sapphire CMFSPBNET Intranet Sapphire CMF
SPBNET Intranet Sapphire CMFIrina Zimitskaya
 
SPBNET: webdev company profile
SPBNET: webdev company profileSPBNET: webdev company profile
SPBNET: webdev company profileIrina Zimitskaya
 
SPBNET Company Profile_english_03.09
SPBNET Company Profile_english_03.09SPBNET Company Profile_english_03.09
SPBNET Company Profile_english_03.09Irina Zimitskaya
 
Features of a realtor company website projection
Features of a realtor company website projectionFeatures of a realtor company website projection
Features of a realtor company website projectionIrina Zimitskaya
 
Presentation Spbnet Dev Eng
Presentation Spbnet Dev EngPresentation Spbnet Dev Eng
Presentation Spbnet Dev EngIrina Zimitskaya
 
Joomla Quick Start 1
Joomla  Quick  Start 1Joomla  Quick  Start 1
Joomla Quick Start 1guest38bfe1
 
Tele2sales.ru: successful corporate social network
Tele2sales.ru: successful corporate social networkTele2sales.ru: successful corporate social network
Tele2sales.ru: successful corporate social networkIrina Zimitskaya
 
1C-Bitrix Corporate Intranet Portal
1C-Bitrix Corporate Intranet Portal1C-Bitrix Corporate Intranet Portal
1C-Bitrix Corporate Intranet PortalIrina Zimitskaya
 

Destaque (9)

SPBNET Intranet Sapphire CMF
SPBNET Intranet Sapphire CMFSPBNET Intranet Sapphire CMF
SPBNET Intranet Sapphire CMF
 
SPBNET: webdev company profile
SPBNET: webdev company profileSPBNET: webdev company profile
SPBNET: webdev company profile
 
SPBNET Company Profile_english_03.09
SPBNET Company Profile_english_03.09SPBNET Company Profile_english_03.09
SPBNET Company Profile_english_03.09
 
Features of a realtor company website projection
Features of a realtor company website projectionFeatures of a realtor company website projection
Features of a realtor company website projection
 
Presentation Spbnet Dev Eng
Presentation Spbnet Dev EngPresentation Spbnet Dev Eng
Presentation Spbnet Dev Eng
 
Joomla Quick Start 1
Joomla  Quick  Start 1Joomla  Quick  Start 1
Joomla Quick Start 1
 
Tele2sales.ru: successful corporate social network
Tele2sales.ru: successful corporate social networkTele2sales.ru: successful corporate social network
Tele2sales.ru: successful corporate social network
 
sc2009white_Teeda
sc2009white_Teedasc2009white_Teeda
sc2009white_Teeda
 
1C-Bitrix Corporate Intranet Portal
1C-Bitrix Corporate Intranet Portal1C-Bitrix Corporate Intranet Portal
1C-Bitrix Corporate Intranet Portal
 

Semelhante a Flex's DI Container

FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -Akio Katayama
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -Akio Katayama
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発Akira Inoue
 
LabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training SlideLabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training SlideYusuke Tochigi
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
R5 3 type annotation
R5 3 type annotationR5 3 type annotation
R5 3 type annotationEIICHI KIMURA
 
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)Fumiya Sakai
 
Tech talk salesforce mobile sdk
Tech talk   salesforce mobile sdkTech talk   salesforce mobile sdk
Tech talk salesforce mobile sdkKazuki Nakajima
 
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都 Flex & Google App Engine for Java & ...
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都  Flex & Google App Engine for Java & ...2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都  Flex & Google App Engine for Java & ...
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都 Flex & Google App Engine for Java & ...Sadao Tokuyama
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireAkio Katayama
 
FlexJSを追いかける(share)
FlexJSを追いかける(share)FlexJSを追いかける(share)
FlexJSを追いかける(share)Jun Funakura
 
AKS と ACI を組み合わせて使ってみた
AKS と ACI を組み合わせて使ってみたAKS と ACI を組み合わせて使ってみた
AKS と ACI を組み合わせて使ってみたHideaki Aoyagi
 
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Javaどこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷JavaToshiaki Maki
 
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発Daizen Ikehara
 
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップYasuhito Yabe
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.jsTanUkkii
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugY Watanabe
 
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるdavid9142
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterMasanori Oobayashi
 

Semelhante a Flex's DI Container (20)

FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
 
LabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training SlideLabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training Slide
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
R5 3 type annotation
R5 3 type annotationR5 3 type annotation
R5 3 type annotation
 
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
 
Tech talk salesforce mobile sdk
Tech talk   salesforce mobile sdkTech talk   salesforce mobile sdk
Tech talk salesforce mobile sdk
 
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都 Flex & Google App Engine for Java & ...
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都  Flex & Google App Engine for Java & ...2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都  Flex & Google App Engine for Java & ...
2010年11月27日土曜日FlexUserGroup勉強会 第125回 京都 Flex & Google App Engine for Java & ...
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
 
Driverについて
DriverについてDriverについて
Driverについて
 
FlexJSを追いかける(share)
FlexJSを追いかける(share)FlexJSを追いかける(share)
FlexJSを追いかける(share)
 
AKS と ACI を組み合わせて使ってみた
AKS と ACI を組み合わせて使ってみたAKS と ACI を組み合わせて使ってみた
AKS と ACI を組み合わせて使ってみた
 
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Javaどこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
 
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
 
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
 
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
 

Mais de Masaaki Yonebayashi (14)

Go guide for Java programmer
Go guide for Java programmerGo guide for Java programmer
Go guide for Java programmer
 
HHVM Hack
HHVM HackHHVM Hack
HHVM Hack
 
Android T2 on cloud
Android T2 on cloudAndroid T2 on cloud
Android T2 on cloud
 
JavaFX-with-Adobe
JavaFX-with-AdobeJavaFX-with-Adobe
JavaFX-with-Adobe
 
Guice2.0
Guice2.0Guice2.0
Guice2.0
 
T2 in Action
T2 in ActionT2 in Action
T2 in Action
 
guice-servlet
guice-servletguice-servlet
guice-servlet
 
T2@java-ja#toyama
T2@java-ja#toyamaT2@java-ja#toyama
T2@java-ja#toyama
 
Merapi -Adobe Air<=>Java-
Merapi -Adobe Air<=>Java-Merapi -Adobe Air<=>Java-
Merapi -Adobe Air<=>Java-
 
sc2009white_T2
sc2009white_T2sc2009white_T2
sc2009white_T2
 
yonex
yonexyonex
yonex
 
S2Flex2
S2Flex2S2Flex2
S2Flex2
 
Teeda
TeedaTeeda
Teeda
 
Wankumatoyama#01
Wankumatoyama#01Wankumatoyama#01
Wankumatoyama#01
 

Flex's DI Container

  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 70. 謝辞 御清聴 ありがとう ございました Flex3勉強会第73回@北陸 2009‐07‐04