{"id":42,"date":"2016-03-22T20:17:54","date_gmt":"2016-03-22T19:17:54","guid":{"rendered":"http:\/\/antek.atthost24.pl\/?p=42"},"modified":"2016-03-25T07:56:52","modified_gmt":"2016-03-25T06:56:52","slug":"dependency-injection-czesc-druga","status":"publish","type":"post","link":"https:\/\/blog.lantkowiak.pl\/index.php\/2016\/03\/22\/dependency-injection-czesc-druga\/","title":{"rendered":"Dependency Injection &#8211; cz\u0119\u015b\u0107 druga"},"content":{"rendered":"<p>W poprzedniej notce pisa\u0142em o swojej implementacji Dependency Injection, kt\u00f3r\u0105 u\u017cy\u0142em w swojej aplikacji. Po chwili dopiero zauwa\u017cy\u0142em pewn\u0105 wad\u0119 mojego podej\u015bcia. Wszystkie instancje s\u0105 tworzone przy inicjalizacji obiektu\u00a0ApplicationModule. Poniewa\u017c bez sensu by\u0142oby tworzenie zawsze wszystkich instancji, nawet tych, kt\u00f3re nie b\u0119d\u0105 potrzebne podczas konkretnego uruchomienia aplikacji postanowi\u0142em to zmieni\u0107.<\/p>\n<p>Wszystkie zmiany, kt\u00f3re zrobi\u0142em w modyfikacji mojej wersji DI dokona\u0142em we wcze\u015bniej wspomnianym obiekcie ApplicationModule.<\/p>\n<p>Poni\u017cej przedstawiam listing tego obiektu.<\/p>\n<pre>object ApplicationModule {\r\n  private val instances = collection.mutable.Map[Class[_], (()=&gt;Any, Any)]()\r\n\r\n  {\r\n    instances.put(classOf[DocumentDao], (documentDAO(), null))\r\n  }\r\n\r\n  def wire[T](clazz: Class[T]): T = {\r\n    val tuple: Option[(() =&gt; Any, Any)] = instances.get(clazz)\r\n    if (tuple.get._2 == null) {\r\n      instances.put(clazz, tuple.get.copy(_2 = tuple.get._1.apply()))\r\n    }\r\n\r\n    instances.get(clazz).get._2.asInstanceOf[T]\r\n  }\r\n\r\n  private def documentDAO(): () =&gt; DocumentDao = {\r\n    () =&gt; new DocumentDaoBean(ApplicationContext.getAppContext)\r\n  }\r\n}<\/pre>\n<p>Zmiany, kt\u00f3rych dokona\u0142em to:<\/p>\n<ul>\n<li>Mapa<br \/>\nWcze\u015bniej mapa przechowywa\u0142a pary Klasa-Instancja. W obecnej implementacji mapa zawiera pary Klasa na krotk\u0119 zawieraj\u0105c\u0105 funkcje oraz instancje. Dok\u0142adniej m\u00f3wi\u0105c krotka zawiera funkcje tworz\u0105c\u0105 dan\u0105 instancje na konkretn\u0105 instancje klasy.<\/li>\n<li>Metoda tworz\u0105ca instancje wstrzykiwanej klasy<br \/>\nWcze\u015bniej metoda zwraca\u0142a now\u0105 instancje danej klasy. W chwili obecnej zwraca funkcje bezparametrow\u0105, kt\u00f3ra po wywo\u0142aniu stworzy instancje klasy.<\/li>\n<li>Blok inicjalizacyjny<br \/>\nDo mapy wsadzamy wszystkie pary Klasa-Krotka, kt\u00f3rych b\u0119dizemy chcieli u\u017cywa\u0107. Jako drug\u0105 warto\u015b\u0107 krotki ustawiamy null, poniewa\u017c nie chcemy jeszcze tworzy\u0107 instancji klasy.<\/li>\n<li>Metoda wire<br \/>\nWe wcze\u015bniejszym podej\u015bciu metoda ta pobiera\u0142a z mapy instancje \u017c\u0105danej klasy i j\u0105 zwraca\u0142a. W chwili obecnej sprawdzamy czy druga warto\u015b\u0107 krotki dla \u017c\u0105danej klasy jest null&#8217;em. Je\u017celi jest to tworzymy now\u0105 instancje \u017c\u0105danej klasy i ja zapisujemy w mapie, a nast\u0119pnie zwracamy stworzon\u0105 instancje. W przypadku gdy druga warto\u015b\u0107 krotki nie jest null&#8217;em to oczywi\u015bcie oznacza, \u017ce instancja zosta\u0142a stworzona wcze\u015bniej i w\u0142a\u015bnie ona zostanie zwr\u00f3cona.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>W poprzedniej notce pisa\u0142em o swojej implementacji Dependency Injection, kt\u00f3r\u0105 u\u017cy\u0142em w swojej aplikacji. Po chwili dopiero zauwa\u017cy\u0142em pewn\u0105 wad\u0119 mojego podej\u015bcia. Wszystkie instancje s\u0105 tworzone przy inicjalizacji&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,6],"tags":[5,3,4],"class_list":["post-42","post","type-post","status-publish","format-standard","hentry","category-daj-sie-poznac","category-simple-document-manager","tag-android","tag-dajsiepoznac","tag-sdm"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Dependency Injection - cz\u0119\u015b\u0107 druga - Lukasz Antkowiak&#039;s blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.lantkowiak.pl\/index.php\/2016\/03\/22\/dependency-injection-czesc-druga\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dependency Injection - cz\u0119\u015b\u0107 druga - Lukasz Antkowiak&#039;s blog\" \/>\n<meta property=\"og:description\" content=\"W poprzedniej notce pisa\u0142em o swojej implementacji Dependency Injection, kt\u00f3r\u0105 u\u017cy\u0142em w swojej aplikacji. Po chwili dopiero zauwa\u017cy\u0142em pewn\u0105 wad\u0119 mojego podej\u015bcia. Wszystkie instancje s\u0105 tworzone przy inicjalizacji...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.lantkowiak.pl\/index.php\/2016\/03\/22\/dependency-injection-czesc-druga\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukasz Antkowiak&#039;s blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-03-22T19:17:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-03-25T06:56:52+00:00\" \/>\n<meta name=\"author\" content=\"\u0141ukasz Antkowiak\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u0141ukasz Antkowiak\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minuty\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.lantkowiak.pl\/index.php\/2016\/03\/22\/dependency-injection-czesc-druga\/\",\"url\":\"https:\/\/blog.lantkowiak.pl\/index.php\/2016\/03\/22\/dependency-injection-czesc-druga\/\",\"name\":\"Dependency Injection - cz\u0119\u015b\u0107 druga - Lukasz Antkowiak&#039;s blog\",\"isPartOf\":{\"@id\":\"https:\/\/blog.lantkowiak.pl\/#website\"},\"datePublished\":\"2016-03-22T19:17:54+00:00\",\"dateModified\":\"2016-03-25T06:56:52+00:00\",\"author\":{\"@id\":\"https:\/\/blog.lantkowiak.pl\/#\/schema\/person\/009bfc4db220c225786c59b1748ba1e6\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.lantkowiak.pl\/index.php\/2016\/03\/22\/dependency-injection-czesc-druga\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.lantkowiak.pl\/index.php\/2016\/03\/22\/dependency-injection-czesc-druga\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.lantkowiak.pl\/index.php\/2016\/03\/22\/dependency-injection-czesc-druga\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/blog.lantkowiak.pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dependency Injection &#8211; cz\u0119\u015b\u0107 druga\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.lantkowiak.pl\/#website\",\"url\":\"https:\/\/blog.lantkowiak.pl\/\",\"name\":\"Lukasz Antkowiak&#039;s blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.lantkowiak.pl\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.lantkowiak.pl\/#\/schema\/person\/009bfc4db220c225786c59b1748ba1e6\",\"name\":\"\u0141ukasz Antkowiak\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/blog.lantkowiak.pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e18e2bfe319da9b5757cf7f7ae1bfecf?s=96&d=monsterid&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e18e2bfe319da9b5757cf7f7ae1bfecf?s=96&d=monsterid&r=g\",\"caption\":\"\u0141ukasz Antkowiak\"},\"description\":\"dd\",\"url\":\"https:\/\/blog.lantkowiak.pl\/index.php\/author\/antek\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Dependency Injection - cz\u0119\u015b\u0107 druga - Lukasz Antkowiak&#039;s blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.lantkowiak.pl\/index.php\/2016\/03\/22\/dependency-injection-czesc-druga\/","og_locale":"pl_PL","og_type":"article","og_title":"Dependency Injection - cz\u0119\u015b\u0107 druga - Lukasz Antkowiak&#039;s blog","og_description":"W poprzedniej notce pisa\u0142em o swojej implementacji Dependency Injection, kt\u00f3r\u0105 u\u017cy\u0142em w swojej aplikacji. Po chwili dopiero zauwa\u017cy\u0142em pewn\u0105 wad\u0119 mojego podej\u015bcia. Wszystkie instancje s\u0105 tworzone przy inicjalizacji...","og_url":"https:\/\/blog.lantkowiak.pl\/index.php\/2016\/03\/22\/dependency-injection-czesc-druga\/","og_site_name":"Lukasz Antkowiak&#039;s blog","article_published_time":"2016-03-22T19:17:54+00:00","article_modified_time":"2016-03-25T06:56:52+00:00","author":"\u0141ukasz Antkowiak","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"\u0141ukasz Antkowiak","Szacowany czas czytania":"2 minuty"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.lantkowiak.pl\/index.php\/2016\/03\/22\/dependency-injection-czesc-druga\/","url":"https:\/\/blog.lantkowiak.pl\/index.php\/2016\/03\/22\/dependency-injection-czesc-druga\/","name":"Dependency Injection - cz\u0119\u015b\u0107 druga - Lukasz Antkowiak&#039;s blog","isPartOf":{"@id":"https:\/\/blog.lantkowiak.pl\/#website"},"datePublished":"2016-03-22T19:17:54+00:00","dateModified":"2016-03-25T06:56:52+00:00","author":{"@id":"https:\/\/blog.lantkowiak.pl\/#\/schema\/person\/009bfc4db220c225786c59b1748ba1e6"},"breadcrumb":{"@id":"https:\/\/blog.lantkowiak.pl\/index.php\/2016\/03\/22\/dependency-injection-czesc-druga\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.lantkowiak.pl\/index.php\/2016\/03\/22\/dependency-injection-czesc-druga\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.lantkowiak.pl\/index.php\/2016\/03\/22\/dependency-injection-czesc-druga\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/blog.lantkowiak.pl\/"},{"@type":"ListItem","position":2,"name":"Dependency Injection &#8211; cz\u0119\u015b\u0107 druga"}]},{"@type":"WebSite","@id":"https:\/\/blog.lantkowiak.pl\/#website","url":"https:\/\/blog.lantkowiak.pl\/","name":"Lukasz Antkowiak&#039;s blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.lantkowiak.pl\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pl-PL"},{"@type":"Person","@id":"https:\/\/blog.lantkowiak.pl\/#\/schema\/person\/009bfc4db220c225786c59b1748ba1e6","name":"\u0141ukasz Antkowiak","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/blog.lantkowiak.pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e18e2bfe319da9b5757cf7f7ae1bfecf?s=96&d=monsterid&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e18e2bfe319da9b5757cf7f7ae1bfecf?s=96&d=monsterid&r=g","caption":"\u0141ukasz Antkowiak"},"description":"dd","url":"https:\/\/blog.lantkowiak.pl\/index.php\/author\/antek\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/posts\/42","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/comments?post=42"}],"version-history":[{"count":4,"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/posts\/42\/revisions"}],"predecessor-version":[{"id":46,"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/posts\/42\/revisions\/46"}],"wp:attachment":[{"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/media?parent=42"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/categories?post=42"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/tags?post=42"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}