{"id":920,"date":"2022-09-03T16:25:48","date_gmt":"2023-07-12T06:04:15","guid":{"rendered":"https:\/\/www.silicloud.com\/ja\/blog\/index.php\/2023\/11\/30\/java%e3%81%ae%e4%be%9d%e5%ad%98%e6%80%a7%e6%b3%a8%e5%85%a5-di%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3%e3%81%ae%e4%be%8b%e3%81%a8%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88\/"},"modified":"2025-08-01T03:32:59","modified_gmt":"2025-07-31T18:32:59","slug":"java%e3%81%ae%e4%be%9d%e5%ad%98%e6%80%a7%e6%b3%a8%e5%85%a5-di%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3%e3%81%ae%e4%be%8b%e3%81%a8%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/ja\/blog\/java%e3%81%ae%e4%be%9d%e5%ad%98%e6%80%a7%e6%b3%a8%e5%85%a5-di%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3%e3%81%ae%e4%be%8b%e3%81%a8%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88\/","title":{"rendered":"Java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165 &#8211; DI\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u4f8b\u3068\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb"},"content":{"rendered":"<p>Java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u30cf\u30fc\u30c9\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3055\u308c\u305f\u4f9d\u5b58\u95a2\u4fc2\u3092\u53d6\u308a\u9664\u3044\u3066\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u758e\u7d50\u5408\u5316\u3001\u62e1\u5f35\u53ef\u80fd\u6027\u3068\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u3082\u306e\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002Java\u3067\u4f9d\u5b58\u6027\u6ce8\u5165\u3092\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001\u4f9d\u5b58\u95a2\u4fc2\u306e\u89e3\u6c7a\u3092\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u304b\u3089\u5b9f\u884c\u6642\u306b\u79fb\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<h2>\u30b8\u30e3\u30f4\u30a1\u306e\u4f9d\u5b58\u6027\u6ce8\u5165<\/h2>\n<p>Java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165\u306f\u7406\u8ad6\u7684\u306b\u306f\u7406\u89e3\u3057\u3065\u3089\u3044\u3088\u3046\u3067\u3059\u306e\u3067\u3001\u7c21\u5358\u306a\u4f8b\u3092\u4f7f\u3063\u3066\u4f9d\u5b58\u6027\u6ce8\u5165\u30d1\u30bf\u30fc\u30f3\u3092\u4f7f\u3063\u3066\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5185\u3067\u306e\u758e\u7d50\u5408\u6027\u3068\u62e1\u5f35\u6027\u3092\u5b9f\u73fe\u3059\u308b\u65b9\u6cd5\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u4f8b\u3048\u3070\u3001\u79c1\u305f\u3061\u304cEmailService\u3092\u4f7f\u7528\u3057\u3066\u30e1\u30fc\u30eb\u3092\u9001\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u3042\u308b\u3068\u3057\u307e\u3059\u3002\u901a\u5e38\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5b9f\u88c5\u3059\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>package com.scdev.java.legacy;\r\n\r\npublic class EmailService {\r\n\r\n\tpublic void sendEmail(String message, String receiver){\r\n\t\t\/\/logic to send email\r\n\t\tSystem.out.println(\"Email sent to \"+receiver+ \" with Message=\"+message);\r\n\t}\r\n}\r\n<\/code><\/pre>\n<p>EmailService\u30af\u30e9\u30b9\u306f\u3001\u53d7\u4fe1\u8005\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306b\u30e1\u30fc\u30eb\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u4fe1\u3059\u308b\u305f\u3081\u306e\u30ed\u30b8\u30c3\u30af\u3092\u4fdd\u6301\u3057\u3066\u3044\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30b3\u30fc\u30c9\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>package com.scdev.java.legacy;\r\n\r\npublic class MyApplication {\r\n\r\n\tprivate EmailService email = new EmailService();\r\n\t\r\n\tpublic void processMessages(String msg, String rec){\r\n\t\t\/\/do some msg validation, manipulation logic etc\r\n\t\tthis.email.sendEmail(msg, rec);\r\n\t}\r\n}\r\n<\/code><\/pre>\n<p>\u4e0b\u8a18\u306e\u3088\u3046\u306b\u3001MyApplication\u30af\u30e9\u30b9\u3092\u4f7f\u7528\u3057\u3066\u96fb\u5b50\u30e1\u30fc\u30eb\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u4fe1\u3059\u308b\u305f\u3081\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30b3\u30fc\u30c9\u304c\u3042\u308b\u3067\u3057\u3087\u3046\u3002<\/p>\n<pre class=\"post-pre\"><code>package com.scdev.java.legacy;\r\n\r\npublic class MyLegacyTest {\r\n\r\n\tpublic static void main(String[] args) {\r\n\t\tMyApplication app = new MyApplication();\r\n\t\tapp.processMessages(\"Hi Pankaj\", \"scdev@abc.com\");\r\n\t}\r\n\r\n}\r\n<\/code><\/pre>\n<p>\u6700\u521d\u306b\u898b\u308b\u9650\u308a\u3001\u4e0a\u8a18\u306e\u5b9f\u88c5\u306b\u306f\u554f\u984c\u304c\u306a\u3044\u3088\u3046\u306b\u601d\u3048\u308b\u3002\u3057\u304b\u3057\u3001\u4e0a\u8a18\u306e\u30b3\u30fc\u30c9\u306e\u8ad6\u7406\u306b\u306f\u7279\u5b9a\u306e\u5236\u9650\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<ul class=\"post-ul\">\n<li>MyApplication class is responsible to initialize the email service and then use it. This leads to hard-coded dependency. If we want to switch to some other advanced email service in the future, it will require code changes in MyApplication class. This makes our application hard to extend and if email service is used in multiple classes then that would be even harder.<\/li>\n<li>If we want to extend our application to provide an additional messaging feature, such as SMS or Facebook message then we would need to write another application for that. This will involve code changes in application classes and in client classes too.<\/li>\n<li>Testing the application will be very difficult since our application is directly creating the email service instance. There is no way we can mock these objects in our test classes.<\/li>\n<\/ul>\n<p>MyApplication\u30af\u30e9\u30b9\u304b\u3089\u3001\u30e1\u30fc\u30eb\u30b5\u30fc\u30d3\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u4f5c\u6210\u3092\u524a\u9664\u3059\u308b\u305f\u3081\u306b\u3001\u30e1\u30fc\u30eb\u30b5\u30fc\u30d3\u30b9\u3092\u5f15\u6570\u3068\u3059\u308b\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3092\u6301\u3064\u3053\u3068\u304c\u3067\u304d\u308b\u3068\u4e3b\u5f35\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3002<\/p>\n<pre class=\"post-pre\"><code>package com.scdev.java.legacy;\r\n\r\npublic class MyApplication {\r\n\r\n\tprivate EmailService email = null;\r\n\t\r\n\tpublic MyApplication(EmailService svc){\r\n\t\tthis.email=svc;\r\n\t}\r\n\t\r\n\tpublic void processMessages(String msg, String rec){\r\n\t\t\/\/do some msg validation, manipulation logic etc\r\n\t\tthis.email.sendEmail(msg, rec);\r\n\t}\r\n}\r\n<\/code><\/pre>\n<p>\u3057\u304b\u3057\u3001\u3053\u306e\u5834\u5408\u306f\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3084\u30c6\u30b9\u30c8\u30af\u30e9\u30b9\u306b\u30e1\u30fc\u30eb\u30b5\u30fc\u30d3\u30b9\u306e\u521d\u671f\u5316\u3092\u8981\u6c42\u3059\u308b\u3068\u3044\u3046\u306e\u306f\u826f\u3044\u30c7\u30b6\u30a4\u30f3\u306e\u6c7a\u5b9a\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u305d\u308c\u3067\u306f\u3001\u4e0a\u8a18\u306e\u5b9f\u88c5\u306e\u3059\u3079\u3066\u306e\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u306b\u3001Java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165\u30d1\u30bf\u30fc\u30f3\u3092\u3069\u306e\u3088\u3046\u306b\u9069\u7528\u3067\u304d\u308b\u304b\u898b\u3066\u307f\u307e\u3057\u3087\u3046\u3002Java\u306b\u304a\u3051\u308b\u4f9d\u5b58\u6027\u6ce8\u5165\u306b\u306f\u3001\u5c11\u306a\u304f\u3068\u3082\u4ee5\u4e0b\u306e\u3082\u306e\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u30b5\u30fc\u30d3\u30b9\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306f\u3001\u30d9\u30fc\u30b9\u30af\u30e9\u30b9\u307e\u305f\u306f\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3067\u8a2d\u8a08\u3059\u308b\u3079\u304d\u3067\u3059\u3002\u30b5\u30fc\u30d3\u30b9\u306e\u5951\u7d04\u3092\u5b9a\u7fa9\u3059\u308b\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3084\u62bd\u8c61\u30af\u30e9\u30b9\u3092\u597d\u3080\u65b9\u304c\u826f\u3044\u3067\u3057\u3087\u3046\u3002<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u30b3\u30f3\u30b7\u30e5\u30fc\u30de\u30af\u30e9\u30b9\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306b\u57fa\u3065\u3044\u3066\u8a18\u8ff0\u3059\u3079\u304d\u3067\u3059\u3002<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\u30b5\u30fc\u30d3\u30b9\u3092\u521d\u671f\u5316\u3057\u3001\u305d\u308c\u304b\u3089\u30b3\u30f3\u30b7\u30e5\u30fc\u30de\u30af\u30e9\u30b9\u3092\u5b9f\u884c\u3059\u308b\u30a4\u30f3\u30b8\u30a7\u30af\u30bf\u30af\u30e9\u30b9\u304c\u5fc5\u8981\u3067\u3059\u3002<\/ol>\n<h3>Java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165 &#8211; \u30b5\u30fc\u30d3\u30b9\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<\/h3>\n<p>\u79c1\u305f\u3061\u306e\u5834\u5408\u3001\u30b5\u30fc\u30d3\u30b9\u5b9f\u88c5\u306e\u305f\u3081\u306e\u5951\u7d04\u3092\u5ba3\u8a00\u3059\u308bMessageService\u3092\u6301\u3064\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>package com.scdev.java.dependencyinjection.service;\r\n\r\npublic interface MessageService {\r\n\r\n\tvoid sendMessage(String msg, String rec);\r\n}\r\n<\/code><\/pre>\n<p>\u3067\u306f\u3001\u4e0a\u8a18\u306e\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3092\u5b9f\u88c5\u3057\u305f\u30e1\u30fc\u30eb\u3068SMS\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u3042\u308b\u3068\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n<pre class=\"post-pre\"><code>package com.scdev.java.dependencyinjection.service;\r\n\r\npublic class EmailServiceImpl implements MessageService {\r\n\r\n\t@Override\r\n\tpublic void sendMessage(String msg, String rec) {\r\n\t\t\/\/logic to send email\r\n\t\tSystem.out.println(\"Email sent to \"+rec+ \" with Message=\"+msg);\r\n\t}\r\n\r\n}\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>package com.scdev.java.dependencyinjection.service;\r\n\r\npublic class SMSServiceImpl implements MessageService {\r\n\r\n\t@Override\r\n\tpublic void sendMessage(String msg, String rec) {\r\n\t\t\/\/logic to send SMS\r\n\t\tSystem.out.println(\"SMS sent to \"+rec+ \" with Message=\"+msg);\r\n\t}\r\n\r\n}\r\n<\/code><\/pre>\n<p>\u79c1\u305f\u3061\u306e\u4f9d\u5b58\u6027\u6ce8\u5165Java\u30b5\u30fc\u30d3\u30b9\u306f\u6e96\u5099\u304c\u6574\u3063\u3066\u304a\u308a\u3001\u4eca\u306f\u6d88\u8cbb\u8005\u30af\u30e9\u30b9\u3092\u66f8\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<h3>Java\u4f9d\u5b58\u6027\u6ce8\u5165 &#8211; \u30b5\u30fc\u30d3\u30b9\u306e\u5229\u7528\u8005<\/h3>\n<p>\u79c1\u305f\u3061\u306f\u3001\u6d88\u8cbb\u8005\u30af\u30e9\u30b9\u306b\u57fa\u672c\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u6301\u3064\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u79c1\u306f\u6d88\u8cbb\u8005\u30af\u30e9\u30b9\u306e\u5951\u7d04\u3092\u5ba3\u8a00\u3059\u308b\u305f\u3081\u306bConsumer\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u6301\u3064\u3053\u3068\u306b\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>package com.scdev.java.dependencyinjection.consumer;\r\n\r\npublic interface Consumer {\r\n\r\n\tvoid processMessages(String msg, String rec);\r\n}\r\n<\/code><\/pre>\n<p>\u79c1\u306e\u6d88\u8cbb\u8005\u30af\u30e9\u30b9\u306e\u5b9f\u88c5\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u3067\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>package com.scdev.java.dependencyinjection.consumer;\r\n\r\nimport com.scdev.java.dependencyinjection.service.MessageService;\r\n\r\npublic class MyDIApplication implements Consumer{\r\n\r\n\tprivate MessageService service;\r\n\t\r\n\tpublic MyDIApplication(MessageService svc){\r\n\t\tthis.service=svc;\r\n\t}\r\n\t\r\n\t@Override\r\n\tpublic void processMessages(String msg, String rec){\r\n\t\t\/\/do some msg validation, manipulation logic etc\r\n\t\tthis.service.sendMessage(msg, rec);\r\n\t}\r\n\r\n}\r\n<\/code><\/pre>\n<p>\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u65e5\u672c\u8a9e\u3067\u306e\u8a00\u3044\u63db\u3048\u3092\u63d0\u6848\u3057\u307e\u3059\uff1a<\/p>\n<p>\u79c1\u305f\u3061\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30af\u30e9\u30b9\u306f\u3001\u5358\u306b\u30b5\u30fc\u30d3\u30b9\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30b5\u30fc\u30d3\u30b9\u306e\u521d\u671f\u5316\u306f\u884c\u308f\u305a\u3001\u300c\u95a2\u5fc3\u306e\u5206\u96e2\u300d\u3092\u6539\u5584\u3057\u3066\u3044\u307e\u3059\u3002\u307e\u305f\u3001\u30b5\u30fc\u30d3\u30b9\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u4f7f\u7528\u306b\u3088\u308a\u3001\u30e1\u30c3\u30bb\u30fc\u30b8\u30b5\u30fc\u30d3\u30b9\u3092\u30e2\u30c3\u30af\u5316\u3057\u3066\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u7c21\u5358\u306b\u30c6\u30b9\u30c8\u3057\u3001\u30b5\u30fc\u30d3\u30b9\u3092\u5b9f\u884c\u6642\u306b\u30d0\u30a4\u30f3\u30c9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u3067\u3001\u30b5\u30fc\u30d3\u30b9\u3068\u30b3\u30f3\u30b7\u30e5\u30fc\u30de\u30af\u30e9\u30b9\u3092\u521d\u671f\u5316\u3059\u308b\u305f\u3081\u306eJava\u306e\u4f9d\u5b58\u6027\u30a4\u30f3\u30b8\u30a7\u30af\u30bf\u30af\u30e9\u30b9\u3092\u66f8\u304f\u6e96\u5099\u304c\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n<h3>Java\u4f9d\u5b58\u6027\u6ce8\u5165 &#8211; \u30a4\u30f3\u30b8\u30a7\u30af\u30bf\u30fc\u30af\u30e9\u30b9<\/h3>\n<p>\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9MessageServiceInjector\u3092\u6301\u3061\u3001Consumer\u30af\u30e9\u30b9\u3092\u8fd4\u3059\u30e1\u30bd\u30c3\u30c9\u306e\u5ba3\u8a00\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>(Let&#8217;s) \u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9MessageServiceInjector\u3067\u3001Consumer\u30af\u30e9\u30b9\u3092\u8fd4\u3059\u30e1\u30bd\u30c3\u30c9\u306e\u5ba3\u8a00\u3092\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n<pre class=\"post-pre\"><code>package com.scdev.java.dependencyinjection.injector;\r\n\r\nimport com.scdev.java.dependencyinjection.consumer.Consumer;\r\n\r\npublic interface MessageServiceInjector {\r\n\r\n\tpublic Consumer getConsumer();\r\n}\r\n<\/code><\/pre>\n<p>\u4eca\u5f8c\u3001\u3059\u3079\u3066\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u3064\u3044\u3066\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30a4\u30f3\u30b8\u30a7\u30af\u30bf\u30fc\u30af\u30e9\u30b9\u3092\u4f5c\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>package com.scdev.java.dependencyinjection.injector;\r\n\r\nimport com.scdev.java.dependencyinjection.consumer.Consumer;\r\nimport com.scdev.java.dependencyinjection.consumer.MyDIApplication;\r\nimport com.scdev.java.dependencyinjection.service.EmailServiceImpl;\r\n\r\npublic class EmailServiceInjector implements MessageServiceInjector {\r\n\r\n\t@Override\r\n\tpublic Consumer getConsumer() {\r\n\t\treturn new MyDIApplication(new EmailServiceImpl());\r\n\t}\r\n\r\n}\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>package com.scdev.java.dependencyinjection.injector;\r\n\r\nimport com.scdev.java.dependencyinjection.consumer.Consumer;\r\nimport com.scdev.java.dependencyinjection.consumer.MyDIApplication;\r\nimport com.scdev.java.dependencyinjection.service.SMSServiceImpl;\r\n\r\npublic class SMSServiceInjector implements MessageServiceInjector {\r\n\r\n\t@Override\r\n\tpublic Consumer getConsumer() {\r\n\t\treturn new MyDIApplication(new SMSServiceImpl());\r\n\t}\r\n\r\n}\r\n<\/code><\/pre>\n<p>\u3067\u306f\u3001\u7c21\u5358\u306a\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u4f7f\u3063\u3066\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u3069\u306e\u3088\u3046\u306b\u5f53\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3059\u308b\u304b\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<pre class=\"post-pre\"><code>package com.scdev.java.dependencyinjection.test;\r\n\r\nimport com.scdev.java.dependencyinjection.consumer.Consumer;\r\nimport com.scdev.java.dependencyinjection.injector.EmailServiceInjector;\r\nimport com.scdev.java.dependencyinjection.injector.MessageServiceInjector;\r\nimport com.scdev.java.dependencyinjection.injector.SMSServiceInjector;\r\n\r\npublic class MyMessageDITest {\r\n\r\n\tpublic static void main(String[] args) {\r\n\t\tString msg = \"Hi Pankaj\";\r\n\t\tString email = \"scdev@abc.com\";\r\n\t\tString phone = \"4088888888\";\r\n\t\tMessageServiceInjector injector = null;\r\n\t\tConsumer app = null;\r\n\t\t\r\n\t\t\/\/Send email\r\n\t\tinjector = new EmailServiceInjector();\r\n\t\tapp = injector.getConsumer();\r\n\t\tapp.processMessages(msg, email);\r\n\t\t\r\n\t\t\/\/Send SMS\r\n\t\tinjector = new SMSServiceInjector();\r\n\t\tapp = injector.getConsumer();\r\n\t\tapp.processMessages(msg, phone);\r\n\t}\r\n\r\n}\r\n<\/code><\/pre>\n<p>\u79c1\u305f\u3061\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30af\u30e9\u30b9\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u306e\u4f7f\u7528\u306b\u3060\u3051\u8cac\u4efb\u3092\u6301\u3063\u3066\u3044\u308b\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3059\u3002\u30b5\u30fc\u30d3\u30b9\u30af\u30e9\u30b9\u306f\u30a4\u30f3\u30b8\u30a7\u30af\u30bf\u30fc\u3067\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002\u307e\u305f\u3001Facebook\u30e1\u30c3\u30bb\u30fc\u30b8\u30f3\u30b0\u3092\u8a31\u53ef\u3059\u308b\u305f\u3081\u306b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u3055\u3089\u306b\u62e1\u5f35\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u3001\u30b5\u30fc\u30d3\u30b9\u30af\u30e9\u30b9\u3068\u30a4\u30f3\u30b8\u30a7\u30af\u30bf\u30fc\u30af\u30e9\u30b9\u306e\u307f\u3092\u4f5c\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001\u4f9d\u5b58\u6027\u6ce8\u5165\u306e\u5b9f\u88c5\u306b\u3088\u308a\u3001\u30cf\u30fc\u30c9\u30b3\u30fc\u30c9\u3055\u308c\u305f\u4f9d\u5b58\u95a2\u4fc2\u306e\u554f\u984c\u304c\u89e3\u6c7a\u3055\u308c\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u67d4\u8edf\u3067\u62e1\u5f35\u3057\u3084\u3059\u304f\u306a\u308a\u307e\u3057\u305f\u3002\u3055\u3066\u3001\u30a4\u30f3\u30b8\u30a7\u30af\u30bf\u30fc\u3068\u30b5\u30fc\u30d3\u30b9\u30af\u30e9\u30b9\u3092\u30e2\u30c3\u30af\u5316\u3057\u3066\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30af\u30e9\u30b9\u3092\u7c21\u5358\u306b\u30c6\u30b9\u30c8\u3067\u304d\u308b\u304b\u898b\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<h3>\u30e2\u30c3\u30af\u30a4\u30f3\u30b8\u30a7\u30af\u30bf\u30fc\u3068\u30b5\u30fc\u30d3\u30b9\u3092\u4f7f\u7528\u3057\u305fJUnit\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u306b\u304a\u3051\u308bJava\u306e\u4f9d\u5b58\u6027\u6ce8\u5165<\/h3>\n<pre class=\"post-pre\"><code>package com.scdev.java.dependencyinjection.test;\r\n\r\nimport org.junit.After;\r\nimport org.junit.Before;\r\nimport org.junit.Test;\r\n\r\nimport com.scdev.java.dependencyinjection.consumer.Consumer;\r\nimport com.scdev.java.dependencyinjection.consumer.MyDIApplication;\r\nimport com.scdev.java.dependencyinjection.injector.MessageServiceInjector;\r\nimport com.scdev.java.dependencyinjection.service.MessageService;\r\n\r\npublic class MyDIApplicationJUnitTest {\r\n\r\n\tprivate MessageServiceInjector injector;\r\n\t@Before\r\n\tpublic void setUp(){\r\n\t\t\/\/mock the injector with anonymous class\r\n\t\tinjector = new MessageServiceInjector() {\r\n\t\t\t\r\n\t\t\t@Override\r\n\t\t\tpublic Consumer getConsumer() {\r\n\t\t\t\t\/\/mock the message service\r\n\t\t\t\treturn new MyDIApplication(new MessageService() {\r\n\t\t\t\t\t\r\n\t\t\t\t\t@Override\r\n\t\t\t\t\tpublic void sendMessage(String msg, String rec) {\r\n\t\t\t\t\t\tSystem.out.println(\"Mock Message Service implementation\");\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\t\r\n\t@Test\r\n\tpublic void test() {\r\n\t\tConsumer consumer = injector.getConsumer();\r\n\t\tconsumer.processMessages(\"Hi Pankaj\", \"scdev@abc.com\");\r\n\t}\r\n\t\r\n\t@After\r\n\tpublic void tear(){\r\n\t\tinjector = null;\r\n\t}\r\n\r\n}\r\n<\/code><\/pre>\n<p>\u4e0a\u306e\u30c6\u30b9\u30c8\u30af\u30e9\u30b9\u3092\u5b9f\u884c\u3059\u308b\u5834\u5408\u3001\u79c1\u306f\u30a4\u30f3\u30b8\u30a7\u30af\u30bf\u30fc\u3068\u30b5\u30fc\u30d3\u30b9\u30af\u30e9\u30b9\u3092\u30e2\u30c3\u30af\u3059\u308b\u305f\u3081\u306b\u533f\u540d\u30af\u30e9\u30b9\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3059\u3002\u79c1\u306f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u7c21\u5358\u306b\u30c6\u30b9\u30c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u4e0a\u8a18\u306e\u30c6\u30b9\u30c8\u30af\u30e9\u30b9\u3067\u306fJUnit 4\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30d3\u30eb\u30c9\u30d1\u30b9\u306b\u7d44\u307f\u8fbc\u307e\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30af\u30e9\u30b9\u3067\u306f\u4f9d\u5b58\u95a2\u4fc2\u3092\u30a4\u30f3\u30b8\u30a7\u30af\u30c8\u3059\u308b\u305f\u3081\u306b\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u30fc\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u5225\u306e\u65b9\u6cd5\u3068\u3057\u3066\u30bb\u30c3\u30bf\u30fc\u30e1\u30bd\u30c3\u30c9\u3067\u4f9d\u5b58\u95a2\u4fc2\u3092\u30a4\u30f3\u30b8\u30a7\u30af\u30c8\u3059\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002\u30bb\u30c3\u30bf\u30fc\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u305f\u4f9d\u5b58\u6027\u306e\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u306b\u3064\u3044\u3066\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30af\u30e9\u30b9\u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"post-pre\"><code>package com.scdev.java.dependencyinjection.consumer;\r\n\r\nimport com.scdev.java.dependencyinjection.service.MessageService;\r\n\r\npublic class MyDIApplication implements Consumer{\r\n\r\n\tprivate MessageService service;\r\n\t\r\n\tpublic MyDIApplication(){}\r\n\r\n\t\/\/setter dependency injection\t\r\n\tpublic void setService(MessageService service) {\r\n\t\tthis.service = service;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void processMessages(String msg, String rec){\r\n\t\t\/\/do some msg validation, manipulation logic etc\r\n\t\tthis.service.sendMessage(msg, rec);\r\n\t}\r\n\r\n}\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>package com.scdev.java.dependencyinjection.injector;\r\n\r\nimport com.scdev.java.dependencyinjection.consumer.Consumer;\r\nimport com.scdev.java.dependencyinjection.consumer.MyDIApplication;\r\nimport com.scdev.java.dependencyinjection.service.EmailServiceImpl;\r\n\r\npublic class EmailServiceInjector implements MessageServiceInjector {\r\n\r\n\t@Override\r\n\tpublic Consumer getConsumer() {\r\n\t\tMyDIApplication app = new MyDIApplication();\r\n\t\tapp.setService(new EmailServiceImpl());\r\n\t\treturn app;\r\n\t}\r\n\r\n}\r\n<\/code><\/pre>\n<p>\u30bb\u30c3\u30bf\u30fc\u306b\u3088\u308b\u4f9d\u5b58\u6027\u6ce8\u5165\u306e\u6700\u9ad8\u306e\u4f8b\u306e\u4e00\u3064\u306f\u3001Struts2 Servlet API Aware \u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3067\u3059\u3002\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u30d9\u30fc\u30b9\u306e\u4f9d\u5b58\u6027\u6ce8\u5165\u3092\u4f7f\u7528\u3059\u308b\u304b\u3001\u30bb\u30c3\u30bf\u30fc\u30d9\u30fc\u30b9\u306e\u4f9d\u5b58\u6027\u6ce8\u5165\u3092\u4f7f\u7528\u3059\u308b\u304b\u306f\u3001\u8a2d\u8a08\u4e0a\u306e\u6c7a\u5b9a\u3067\u3042\u308a\u3001\u8981\u4ef6\u306b\u4f9d\u5b58\u3057\u307e\u3059\u3002\u305f\u3068\u3048\u3070\u3001\u30b5\u30fc\u30d3\u30b9\u30af\u30e9\u30b9\u306a\u3057\u3067\u306f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u307e\u3063\u305f\u304f\u52d5\u4f5c\u3057\u306a\u3044\u5834\u5408\u306f\u3001\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u30d9\u30fc\u30b9\u306eDI\u3092\u9078\u629e\u3059\u308b\u304b\u3001\u305d\u308c\u4ee5\u5916\u306e\u5834\u5408\u306f\u672c\u5f53\u306b\u5fc5\u8981\u306a\u6642\u306b\u306e\u307f\u4f7f\u7528\u3059\u308b\u305f\u3081\u3001\u30bb\u30c3\u30bf\u30fc\u30e1\u30bd\u30c3\u30c9\u30d9\u30fc\u30b9\u306eDI\u3092\u9078\u629e\u3057\u307e\u3059\u3002Java\u306b\u304a\u3051\u308b\u4f9d\u5b58\u6027\u6ce8\u5165\u306f\u3001\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u304b\u3089\u5b9f\u884c\u6642\u3078\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u3092\u79fb\u52d5\u3059\u308b\u3053\u3068\u306b\u3088\u3063\u3066\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u9006\u5236\u5fa1\uff08IoC\uff09\u3092\u5b9f\u73fe\u3059\u308b\u305f\u3081\u306e\u65b9\u6cd5\u3067\u3059\u3002IoC\u306f\u3001\u30d5\u30a1\u30af\u30c8\u30ea\u30fc\u30d1\u30bf\u30fc\u30f3\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30e1\u30bd\u30c3\u30c9\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u3001\u30b9\u30c8\u30e9\u30c6\u30b8\u30fc\u30d1\u30bf\u30fc\u30f3\u3001\u304a\u3088\u3073\u30b5\u30fc\u30d3\u30b9\u30ed\u30b1\u30fc\u30bf\u30fc\u30d1\u30bf\u30fc\u30f3\u3092\u901a\u3058\u3066\u5b9f\u73fe\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002Spring\u4f9d\u5b58\u6027\u6ce8\u5165\u3001Google Guice\u3001\u304a\u3088\u3073Java EE CDI\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306f\u3001Java Reflection API\u3068Java\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u4f7f\u7528\u3092\u901a\u3058\u3066\u4f9d\u5b58\u6027\u6ce8\u5165\u306e\u30d7\u30ed\u30bb\u30b9\u3092\u5bb9\u6613\u306b\u3057\u307e\u3059\u3002\u30d5\u30a3\u30fc\u30eb\u30c9\u3001\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3001\u307e\u305f\u306f\u30bb\u30c3\u30bf\u30fc\u30e1\u30bd\u30c3\u30c9\u306b\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4ed8\u3051\u3001\u305d\u308c\u3089\u3092\u69cb\u6210XML\u30d5\u30a1\u30a4\u30eb\u307e\u305f\u306f\u30af\u30e9\u30b9\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<h3>Java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165\u306e\u5229\u70b9<\/h3>\n<p>Java\u3067Dependency Injection\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u306e\u3044\u304f\u3064\u304b\u306e\u5229\u70b9\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u3059\u3002<\/p>\n<ul class=\"post-ul\">\n<li>Separation of Concerns<\/li>\n<li>Boilerplate Code reduction in application classes because all work to initialize dependencies is handled by the injector component<\/li>\n<li>Configurable components makes application easily extendable<\/li>\n<li>Unit testing is easy with mock objects<\/li>\n<\/ul>\n<h3>Java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165\u306e\u30c7\u30e1\u30ea\u30c3\u30c8<\/h3>\n<p>Java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165\u306b\u306f\u3044\u304f\u3064\u304b\u306e\u30c7\u30e1\u30ea\u30c3\u30c8\u3082\u3042\u308a\u307e\u3059\u3002<\/p>\n<ul class=\"post-ul\">\n<li>If overused, it can lead to maintenance issues because the effect of changes are known at runtime.<\/li>\n<li>Dependency injection in java hides the service class dependencies that can lead to runtime errors that would have been caught at compile time.<\/li>\n<\/ul>\n<p>\u4f9d\u5b58\u6027\u6ce8\u5165\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>Java\u306b\u304a\u3051\u308b\u4f9d\u5b58\u6027\u6ce8\u5165\u30d1\u30bf\u30fc\u30f3\u306b\u3064\u3044\u3066\u306f\u4ee5\u4e0a\u3067\u3059\u3002\u30b5\u30fc\u30d3\u30b9\u3092\u5236\u5fa1\u3067\u304d\u308b\u5834\u5408\u306b\u306f\u3001\u77e5\u3063\u3066\u4f7f\u7528\u3059\u308b\u306e\u304c\u826f\u3044\u3067\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u30cf\u30fc\u30c9\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3055\u308c\u305f\u4f9d\u5b58\u95a2\u4fc2\u3092\u53d6\u308a\u9664\u3044\u3066\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u758e\u7d50\u5408\u5316\u3001\u62e1\u5f35\u53ef\u80fd\u6027\u3068\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u3082\u306e\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002Java\u3067\u4f9d\u5b58\u6027\u6ce8\u5165\u3092\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001\u4f9d\u5b58\u95a2\u4fc2 [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[26,61],"class_list":["post-920","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-26","tag-61"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165 - DI\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u4f8b\u3068\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"Java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165 - DI\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u4f8b\u3068\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/ja\/blog\/java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165-di\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u4f8b\u3068\u30c1\u30e5\u30fc\u30c8\/\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165 - DI\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u4f8b\u3068\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\" \/>\n<meta property=\"og:description\" content=\"Java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165 - DI\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u4f8b\u3068\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/ja\/blog\/java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165-di\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u4f8b\u3068\u30c1\u30e5\u30fc\u30c8\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-12T06:04:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-31T18:32:59+00:00\" \/>\n<meta name=\"author\" content=\"\u6d77\u6597, \u8475\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6d77\u6597, \u8475\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"26\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/java%e3%81%ae%e4%be%9d%e5%ad%98%e6%80%a7%e6%b3%a8%e5%85%a5-di%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3%e3%81%ae%e4%be%8b%e3%81%a8%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88\/\",\"url\":\"https:\/\/www.silicloud.com\/ja\/blog\/java%e3%81%ae%e4%be%9d%e5%ad%98%e6%80%a7%e6%b3%a8%e5%85%a5-di%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3%e3%81%ae%e4%be%8b%e3%81%a8%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88\/\",\"name\":\"Java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165 - DI\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u4f8b\u3068\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#website\"},\"datePublished\":\"2023-07-12T06:04:15+00:00\",\"dateModified\":\"2025-07-31T18:32:59+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/20cfc053626f4d45c0fa7a4e7964b5b6\"},\"description\":\"Java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165 - DI\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u4f8b\u3068\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/java%e3%81%ae%e4%be%9d%e5%ad%98%e6%80%a7%e6%b3%a8%e5%85%a5-di%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3%e3%81%ae%e4%be%8b%e3%81%a8%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88\/#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/ja\/blog\/java%e3%81%ae%e4%be%9d%e5%ad%98%e6%80%a7%e6%b3%a8%e5%85%a5-di%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3%e3%81%ae%e4%be%8b%e3%81%a8%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/java%e3%81%ae%e4%be%9d%e5%ad%98%e6%80%a7%e6%b3%a8%e5%85%a5-di%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3%e3%81%ae%e4%be%8b%e3%81%a8%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/ja\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165 &#8211; DI\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u4f8b\u3068\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/ja\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/20cfc053626f4d45c0fa7a4e7964b5b6\",\"name\":\"\u6d77\u6597, \u8475\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/25aec9a18954b6bfb7e4f7219c2923d62c6f0c9f4d5c0171228fe41751c0ab7a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/25aec9a18954b6bfb7e4f7219c2923d62c6f0c9f4d5c0171228fe41751c0ab7a?s=96&d=mm&r=g\",\"caption\":\"\u6d77\u6597, \u8475\"},\"url\":\"https:\/\/www.silicloud.com\/ja\/blog\/author\/kaitoaoi\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/www.silicloud.com\/ja\/blog\/java%e3%81%ae%e4%be%9d%e5%ad%98%e6%80%a7%e6%b3%a8%e5%85%a5-di%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3%e3%81%ae%e4%be%8b%e3%81%a8%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165 - DI\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u4f8b\u3068\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb - Blog - Silicon Cloud","description":"Java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165 - DI\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u4f8b\u3068\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002","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:\/\/www.silicloud.com\/ja\/blog\/java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165-di\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u4f8b\u3068\u30c1\u30e5\u30fc\u30c8\/","og_locale":"ja_JP","og_type":"article","og_title":"Java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165 - DI\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u4f8b\u3068\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb","og_description":"Java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165 - DI\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u4f8b\u3068\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002","og_url":"https:\/\/www.silicloud.com\/ja\/blog\/java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165-di\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u4f8b\u3068\u30c1\u30e5\u30fc\u30c8\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-07-12T06:04:15+00:00","article_modified_time":"2025-07-31T18:32:59+00:00","author":"\u6d77\u6597, \u8475","twitter_card":"summary_large_image","twitter_misc":{"\u57f7\u7b46\u8005":"\u6d77\u6597, \u8475","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"26\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/ja\/blog\/java%e3%81%ae%e4%be%9d%e5%ad%98%e6%80%a7%e6%b3%a8%e5%85%a5-di%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3%e3%81%ae%e4%be%8b%e3%81%a8%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88\/","url":"https:\/\/www.silicloud.com\/ja\/blog\/java%e3%81%ae%e4%be%9d%e5%ad%98%e6%80%a7%e6%b3%a8%e5%85%a5-di%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3%e3%81%ae%e4%be%8b%e3%81%a8%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88\/","name":"Java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165 - DI\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u4f8b\u3068\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/ja\/blog\/#website"},"datePublished":"2023-07-12T06:04:15+00:00","dateModified":"2025-07-31T18:32:59+00:00","author":{"@id":"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/20cfc053626f4d45c0fa7a4e7964b5b6"},"description":"Java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165 - DI\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u4f8b\u3068\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac\u3002\u5b9f\u8df5\u7684\u306a\u4f8b\u3068\u30b3\u30fc\u30c9\u3001\u6ce8\u610f\u70b9\u3092\u542b\u3081\u3066\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u8aac\u660e\u3057\u307e\u3059\u3002","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/ja\/blog\/java%e3%81%ae%e4%be%9d%e5%ad%98%e6%80%a7%e6%b3%a8%e5%85%a5-di%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3%e3%81%ae%e4%be%8b%e3%81%a8%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88\/#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/ja\/blog\/java%e3%81%ae%e4%be%9d%e5%ad%98%e6%80%a7%e6%b3%a8%e5%85%a5-di%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3%e3%81%ae%e4%be%8b%e3%81%a8%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/ja\/blog\/java%e3%81%ae%e4%be%9d%e5%ad%98%e6%80%a7%e6%b3%a8%e5%85%a5-di%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3%e3%81%ae%e4%be%8b%e3%81%a8%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/ja\/blog\/"},{"@type":"ListItem","position":2,"name":"Java\u306e\u4f9d\u5b58\u6027\u6ce8\u5165 &#8211; DI\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u4f8b\u3068\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/ja\/blog\/#website","url":"https:\/\/www.silicloud.com\/ja\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/20cfc053626f4d45c0fa7a4e7964b5b6","name":"\u6d77\u6597, \u8475","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.silicloud.com\/ja\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/25aec9a18954b6bfb7e4f7219c2923d62c6f0c9f4d5c0171228fe41751c0ab7a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/25aec9a18954b6bfb7e4f7219c2923d62c6f0c9f4d5c0171228fe41751c0ab7a?s=96&d=mm&r=g","caption":"\u6d77\u6597, \u8475"},"url":"https:\/\/www.silicloud.com\/ja\/blog\/author\/kaitoaoi\/"},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.silicloud.com\/ja\/blog\/java%e3%81%ae%e4%be%9d%e5%ad%98%e6%80%a7%e6%b3%a8%e5%85%a5-di%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3%e3%81%ae%e4%be%8b%e3%81%a8%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts\/920","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/comments?post=920"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts\/920\/revisions"}],"predecessor-version":[{"id":46661,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/posts\/920\/revisions\/46661"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/media?parent=920"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/categories?post=920"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/ja\/blog\/wp-json\/wp\/v2\/tags?post=920"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}