InversifyJS is a lightweight inversion of control (IoC) container for TypeScript and JavaScript apps.
InversifyJS is a lightweight inversion of control (IoC) container for TypeScript and JavaScript apps.
DIコンテナ使ってるけど、アノテーションってなんなの!って聞かれて、作ってみたらわかるよと答えてみたので、自分でも作ってみました。 よくわかった。 「DIコンテナ使うと何がいいの?」ということも、作ってみるとわかります。あと「DIって何がいいの?」に関しては、「DIはちょっとコードを書くのが楽になるだけで、それだけあっても仕方ない、大事なのはコンテナ」と答えるようにしてますが、コード比率からもそれがよくわかります。 続編としてWebフレームワークも作っているので参考まで。 作って理解するWebフレームワーク - きしだのHatena まずはコンテナを作る とりあえず1ソースの状態で。 こんな感じで、管理する型を登録できるようにします。 static Map<String, Class> types = new HashMap<>(); static void register(String
友人から「しんぺいさん DI について書いてほしい」みたいな話をだいぶ前からされてたんだけど書く気力ずっとなかった。でも仕事の気分転換にちょっとずつ書いたやつがいい量まとまったので公開するです。たいしたことは書いてないっていうか知ってるひとにはあたりまえのことしか書いてない。サンプルコードはわたしの趣味で Scala で書いてあるが、Java が読めればなんとなく読めると思います。 DI ってなに Dependency Injection、日本語で言えば依存性の注入です。おしまい。 で記事を終えてもいいんだけど、そもそも依存性とはなんなのか、それを注入するとはどういうことなのか、なぜ DI が必要となるのかみたいな話をこれからします。 そもそも依存性ってなあに 例を出します。入力された文字列をもとにおみくじをひいて、その結果を twitter に投稿するプログラムにしましょう。 まずは普通
このエントリは完全に自分用の備忘録です。後で設計判断の根拠を思い出すため。 今、GAE/Jを使ってちょこちょこプログラミングをしているのですが、やっぱりDIコンテナを使いたい。 と言う事で無条件に(昔から慣れ親しんでる)Spring Frameworkを使おうかと思ったのですが、JSR-299やJSR-330との兼ね合いもあって、やはり将来的に標準へと移行する事を見据えたプログラミングをしたい。 ってことで、「Google App Engine上でも動く」と言われているDIコンテナであるSpring/Guice/Weldと言う選択肢でいろいろ悩んだんですが、結局Guiceにしました。それぞれのDIコンテナに対するぼくの認識としては Spring Framework・・・利点としては、DIの世界でデファクトを続けてきただけあって、Spring対応を謳うライブラリが星の数ほどある。選び放題。欠
@Inject仕様をJCPにドラフトとして提出した模様。 どうやらSpring、Guiceだけでなく、PicoContainer、Plexus、あとTapestry IoCの人も参加するようです。 記述内容をざっと読むと、どうやらメインターゲットがJavaSEでJDK5から使えるようにしようとのことみたい。 なので、JavaEEじゃなくても使える点が好印象。非常にロウレベルなAPIを提供するんだというのが仕様全体に書かれているので、 そういうJSRはなんとなくよい気がします。 ポイントになりそうな点を幾つか。 Java SE 5 will be the minimum requirement, but Java SE 6 and 7-specific features will be available on those platforms. APIもjavaxでなくて、もしかしたらjav
Web Beans(JSR299)に対抗して、Guice, Spring連合が新しいDIの仕様を出してますね。 http://google-code-updates.blogspot.com/2009/05/javaxinjectinject.html 超ざっくばらんに言うと、まぁGuiceですな。 なぜ、この時期に、Web Beansとかぶるような仕様を出してきたかというと、Web Beans(Gavin)の政治的な動きに対して、Guice(Bob Lee)も政治的な動きで対抗したというところでしょう。あくまでも私見ですが。 これに対して、Gavinが反論を書いていて、それに対して、Bob Leeがさらに答え、子供の喧嘩みたいになっています。 http://in.relation.to/Bloggers/CommentsOnAnnotationsForDependencyInjectio
>>前編 DI DIコンテナがどのような仕組みでDIを実現しているのか見ていこう。 親クラスAに子クラスBを引き渡す場合で考える。まずDIコンテナには(1)クラス間の関係(依存性)を記述した設定ファイルを登録しておく(図1)。代表的なDIコンテナであるSeasar2やSpring Frameworkでは,この設定ファイルはXMLで記述する。そして,(2)クラスAを取得したいという要求をDIコンテナが受け付けると,(3)DIコンテナがクラスAに関する設定ファイルを読み取る。(4)設定ファイルに従って,クラスAと,関連するクラスBを生成する。(5)インタフェースを介して,クラスBをクラスAに引き渡す,といった仕組みである。もしクラスAに引き渡すクラスを削除したい場合は,「クラスBを生成する,クラスBをクラスAに引き渡す」といった設定を,設定ファイルから削除すればよい。 図1●DIコンテナの仕組
「DI(Dependency Injection)」および「AOP(Aspect Oriented Programming)」と呼ばれる技術が注目を集めている。これらはオブジェクト指向プログラミングにおけるプログラムの単位であるクラスを,互いに結び付ける新たな技術である。システムへの機能変更ニーズが高くなり,さらに開発期間が短くなっている開発の現場において,開発の効率化や品質向上を実現する新たな手段として期待されている。まずはオブジェクト指向プログラミングにおける課題を明らかにし,DIやAOPがそれらをどう解決できるのかを見よう。 DIでクラスを容易に付け外す オブジェクト指向プログラミングの一つ目の課題として,「変更時にクラスの修正が必要になる」ことがある。そもそも,オブジェクト指向で開発したプログラムは,オブジェクト指向ではないプログラムと比べ,機能の削除や変更が容易であることが特徴だ
“DI”や“AOP”というキーワードを耳にしたことがあるだろうか。これらのテクノロジは、.NET技術者にはまだまだ普及していないのが現状だが、Java開発での長年の利用結果から見ても開発生産性を飛躍的に高めてくれるテクノロジであることは間違いなく、.NET開発でも必ず役立つものであり、むしろ使わない手はない。従って、できるだけ多くの.NET開発者にこれらのテクノロジの良さを知っていただき、有効に活用していただきたいと筆者は考えている。 そこで本稿では2回にわたり、前編でDIを、後編でAOPを紹介していきたいと思う。本稿を通して.NET開発におけるDIとAOPの有効性と可能性を感じ取っていただければ幸いである。 ■1. DIとAOPを理解するためのサンプルの作成 DI(Dependency Injection。依存注入)とAOP(Aspect-Oriented Programming。アスペ
以下の文章は、Martin Fowler の「Inversion of Control Containers and the Dependency Injection pattern」を、かくたにが翻訳したものです。原著者の許可を得て翻訳・公開しています。 翻訳にあたっては、kdmsnr さんにご協力をいただきました。ありがとうございます。公開後の改訂履歴を記事の最後に記述しています。 Java コミュニティでは軽量コンテナが花盛りである。 軽量コンテナは、異なるプロジェクトのコンポーネントをひとまとまりのアプリケーションとして組み立てることを支援する。 このようなコンテナの根底には、コンポーネントの結び付け方についての共通したパターンがある。 そのパターンのコンセプトは「Inversion of Control(制御の反転)」と、まことに包括的な名前で呼ばれている。 本記事では、このパタ
コンポーネントの疎結合化・再利用を促す手法であるDI(Dependency Injection)ですが、Geronimoカーネルの最大の特徴は、GBeanの取り扱いにこのDIの考え方を取り入れている点と言えるかもしれません。今回は、GBeanに活用されているDIの仕組みを紹介します。 最近「DI(Dependency Injection)」という言葉をよく耳にするようになりました。DIとは、コンポーネントの疎結合化・再利用を促す手法として非常に注目されています。コンポーネント内部にほかのコンポーネントへの依存を直接記述せず、外部ファイルに定義します。稼働時はDIコンテナと呼ばれる軽量コンテナによって依存性が注入されることによって、柔軟性・再利用性を確保します(詳細については、書籍「Seasar入門 はじめてのDI&AOP」のほか、各種技術サイト、技術ブログなどが参考になると思います)。 そ
Javaプログラミングにおいて、クラスの独立性を高め、再利用性の高さ、実装の入れ替えの容易さ、アスペクトの自動的な適用、ホットデプロイなどサーバデベロップメントに欠かせない機能を実現するための基盤技術のひとつにDI(Dependency Injection)がある。DIはインタフェースと実装の完全な分離を目指し、主にDIコンテナと呼ばれる専用の実行環境/フレームワークを通して実現される。 DIコンテナの実装はいくつかあるが、ここでは11日に最新版の2.4.0(2.4.1)がリリースされたSeasar 2.4(S2Container 2.4)を取り上げて紹介したい。Seasar 2.4はThe Seasar Foundationによって開発がおこなわれているプロダクトで、周辺プロダクトの充実や日本語ドキュメントの充実など、国内におけるエンタープライズ向けWebアプリケーションシステム開発用の
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く