{"id":126739,"date":"2024-05-28T21:48:33","date_gmt":"2024-05-28T20:48:33","guid":{"rendered":"https:\/\/www.baeldung.com\/spring-boot-autowire-multiple-implementations"},"modified":"2024-05-28T21:48:33","modified_gmt":"2024-05-28T20:48:33","slug":"autowiring-an-interface-with-multiple-implementations","status":"publish","type":"post","link":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/2024\/05\/28\/autowiring-an-interface-with-multiple-implementations\/","title":{"rendered":"Autowiring an Interface With Multiple Implementations"},"content":{"rendered":"<p><img src=\"https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/10\/Spring-Featured-Image-08-1024x536.png\" class=\"webfeedsFeaturedVisual wp-post-image\" alt=\"\" style=\"float: left; margin-right: 5px;\" decoding=\"async\" srcset=\"https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/10\/Spring-Featured-Image-08-1024x536.png 1024w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/10\/Spring-Featured-Image-08-300x157.png 300w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/10\/Spring-Featured-Image-08-768x402.png 768w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/10\/Spring-Featured-Image-08-100x52.png 100w, https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/10\/Spring-Featured-Image-08.png 1200w\" sizes=\"(max-width: 580px) 100vw, 580px\" \/><\/p>\n<h2 id=\"bd-introduction\" data-id=\"introduction\">1. Introduction<\/h2>\n<div class=\"bd-anchor\" id=\"introduction\"><\/div>\n<p><strong>In this article, we&#8217;ll explore autowiring an interface with multiple implementations in Spring Boot, ways to do that, and some use cases.<\/strong> This is a powerful feature that allows developers to inject different implementations of the interface into the application dynamically.<\/p>\n<h2 id=\"bd-default-behavior\" data-id=\"default-behavior\">2. Default Behavior<\/h2>\n<div class=\"bd-anchor\" id=\"default-behavior\"><\/div>\n<p>Usually, when we have multiple interface implementations and try to autowire that interface into the component, <strong>we&#8217;ll get an error &#8211; &#8220;required a single bean, but X were found&#8221;. <\/strong>The reason is simple: Spring doesn&#8217;t know which implementation we want to see in that component. Fortunately, Spring provides multiple tools to be more specific.<\/p>\n<h2 id=\"bd-introducing-qualifiers\" data-id=\"introducing-qualifiers\">3. Introducing Qualifiers<\/h2>\n<div class=\"bd-anchor\" id=\"introducing-qualifiers\"><\/div>\n<p><strong>With the\u00a0<em>@Qualifier<\/em> annotation, we specify which bean we want to autowire among multiple candidates.<\/strong> We can apply it to the component itself to give it a custom qualifier name:<\/p>\n<pre><code class=\"language-java\">@Service\r\n@Qualifier(&quot;goodServiceA-custom-name&quot;)\r\npublic class GoodServiceA implements GoodService {\r\n    \/\/ implemantation\r\n}<\/code><\/pre>\n<p>After that, we annotate parameters with <em>@Qualifier<\/em> to specify which implementation we want:<\/p>\n<pre><code class=\"language-java\">@Autowired\r\npublic SimpleQualifierController(\r\n    @Qualifier(&quot;goodServiceA-custom-name&quot;) GoodService niceServiceA,\r\n    @Qualifier(&quot;goodServiceB&quot;) GoodService niceServiceB,\r\n    GoodService goodServiceC\r\n) {\r\n        this.goodServiceA = niceServiceA;\r\n        this.goodServiceB = niceServiceB;\r\n        this.goodServiceC = goodServiceC;\r\n}<\/code><\/pre>\n<p>In the example above, we can see that we used our custom qualifier to autowire <em>GoodServiceA<\/em>. At the same time, for <em>GoodServiceB<\/em>, we do not have a custom qualifier:<\/p>\n<pre><code class=\"language-java\">@Service\r\npublic class GoodServiceB implements GoodService {\r\n    \/\/ implementation\r\n}\r\n<\/code><\/pre>\n<p>In this case, we autowired the component by class name. The qualifier for such autowiring should be in the camel case, for example &#8220;myAwesomeClass&#8221; is a valid qualifier if the class name was &#8220;MyAwesomeClass<em>&#8220;<\/em>.<\/p>\n<p>The third parameter in the above code is even more interesting. We didn&#8217;t even need to annotate it with <em>@Qualifier<\/em>, because <strong>Spring will try to autowire the component by parameter name by default<\/strong>, and if <em>GoodServiceC<\/em> exists we&#8217;ll avoid the error:<\/p>\n<pre><code class=\"language-java\">@Service \r\npublic class GoodServiceC implements GoodService { \r\n    \/\/ implementation \r\n}<\/code><\/pre>\n<h2 id=\"bd-primary-component\" data-id=\"primary-component\">4. Primary Component<\/h2>\n<div class=\"bd-anchor\" id=\"primary-component\"><\/div>\n<p>Furthermore, we can annotate one of the implementations with <em>@Primary<\/em>.<strong> Spring will use this implementation if there are multiple candidates and autowiring by parameter name or a qualifier is not applicable:<\/strong><\/p>\n<pre><code class=\"language-java\">@Primary\r\n@Service\r\npublic class GoodServiceC implements GoodService {\r\n    \/\/ implementation\r\n}<\/code><\/pre>\n<p>It is useful when we frequently use one of the implementations and helps to avoid the &#8220;required a single bean&#8221; error.<\/p>\n<h2 id=\"bd-profiles\" data-id=\"profiles\">5. Profiles<\/h2>\n<div class=\"bd-anchor\" id=\"profiles\"><\/div>\n<p><strong>It is possible to use Spring profiles to decide which component to autowire.<\/strong> For example, we may have a <em>FileStorage<\/em> interface with two implementations &#8211; <em>S3FileStorage<\/em> and <em>AzureFileStorage<\/em>. We can make <em>S3FileStorage<\/em> active only on the <em>prod<\/em> profile and <em>AzureFileStorage<\/em> only for the <em>dev<\/em> profile.<\/p>\n<pre><code class=\"language-java\">@Service\r\n@Profile(&quot;dev&quot;)\r\npublic class AzureFileStorage implements FileStorage {\r\n    \/\/ implementation\r\n}\r\n@Service\r\n@Profile(&quot;prod&quot;)\r\npublic class S3FileStorage implements FileStorage {\r\n    \/\/ implementation\r\n}\r\n<\/code><\/pre>\n<h2 id=\"bd-autowire-implementations-into-a-collection\" data-id=\"autowire-implementations-into-a-collection\">6. Autowire Implementations Into a Collection<\/h2>\n<div class=\"bd-anchor\" id=\"autowire-implementations-into-a-collection\"><\/div>\n<p><strong>Spring allows us to inject all available beans of a specific type into a collection.<\/strong> Here is how we autowire all implementations of the <em>GoodService<\/em> into a list:<\/p>\n<pre><code class=\"language-java\">@Autowired\r\npublic SimpleCollectionController(List&lt;GoodService&gt; goodServices) {\r\n    this.goodServices = goodServices;\r\n}\r\n<\/code><\/pre>\n<p>Also, we can autowire implementations into a set, a map, or an array. When using a map, the format typically is <em>Map&lt;String, GoodService&gt;<\/em>, where the keys are the names of the beans, and the values are the bean instances themselves:<\/p>\n<pre><code class=\"language-java\">@Autowired\r\npublic SimpleCollectionController(Map&lt;String, GoodService&gt; goodServiceMap) {\r\n        this.goodServiceMap = goodServiceMap;\r\n}\r\npublic void printAllHellos() {\r\n    String messageA = goodServiceMap.get(&quot;goodServiceA&quot;).getHelloMessage();\r\n    String messageB = goodServiceMap.get(&quot;goodServiceB&quot;).getHelloMessage();\r\n    \/\/ print messages\r\n}<\/code><\/pre>\n<p><strong>Important note: Spring will autowire all candidate beans into a collection regardless of qualifiers or parameter names, as long as they are active.<\/strong> It ignores beans annotated with <em>@Profile<\/em> that do not match the current profile. Similarly, Spring includes beans annotated with <em>@Conditional<\/em> only if the conditions are met\u00a0(more details in the next section).<\/p>\n<h2 id=\"bd-advanced-control\" data-id=\"advanced-control\">7. Advanced Control<\/h2>\n<div class=\"bd-anchor\" id=\"advanced-control\"><\/div>\n<p>Spring allows us to have additional control over which candidates are selected for autowiring.<\/p>\n<p><strong>For more precise conditions on which bean becomes a candidate for autowiring, we can annotate them with <em>@Conditional<\/em>.<\/strong> It should have a parameter with a class that implements the <em>Condition<\/em> (it is a functional interface). For example, here is the <em>Condition<\/em> that checks if the operating system is Windows:<\/p>\n<pre><code class=\"language-java\">public class OnWindowsCondition implements Condition {\r\n    @Override \r\n    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {\r\n        return context.getEnvironment().getProperty(&quot;os.name&quot;).toLowerCase().contains(&quot;windows&quot;);\r\n    } \r\n}<\/code><\/pre>\n<p>Here is how we annotate our component with <em>@Conditional<\/em>:<\/p>\n<pre><code class=\"language-java\">@Component \r\n@Conditional(OnWindowsCondition.class) \r\npublic class WindowsFileService implements FileService {\r\n    @Override \r\n    public void readFile() {\r\n        \/\/ implementation\r\n    } \r\n}<\/code><\/pre>\n<p>In this example, <em>WindowsFileService<\/em> will become a candidate for autowiring only if <em>matches()<\/em> in <em>OnWindowsCondition<\/em> returns true.<\/p>\n<p>We should be careful with <em>@Conditional<\/em> annotations for non-collection autowiring since multiple beans that match the condition will cause an error.<\/p>\n<p>Also, we will get an error if no candidates are found. Because of this, when integrating <em>@Conditional<\/em> with autowiring, it makes sense to set an optional injection. This ensures that the application can still proceed without throwing an error if it does not find a suitable bean. There are two approaches to achieve this:<\/p>\n<pre><code class=\"language-\">@Autowired(required = false)\r\nprivate GoodService goodService; \/\/ not very safe, we should check this for null\r\n@Autowired\r\nprivate Optional&lt;GoodService&gt; goodService; \/\/ safer way<\/code><\/pre>\n<p><strong>When we autowire into the collection, we can specify the order of the components by using <em>@Order<\/em> annotation:<\/strong><\/p>\n<pre><code class=\"language-java\">@Order(2) \r\npublic class GoodServiceA implements GoodService { \r\n    \/\/ implementation\r\n } \r\n@Order(1) \r\npublic class GoodServiceB implements GoodService {\r\n    \/\/ implementation \r\n}<\/code><\/pre>\n<p>If we try to autowire <em>List&lt;GoodService&gt;<\/em>, <em>GoodServiceB<\/em> will be placed before <em>GoodServiceA<\/em>. Important note: <em>@Order <\/em>doesn&#8217;t work when we are autowiring into the <em>Set<\/em>.<\/p>\n<h2 id=\"bd-conclusion\" data-id=\"conclusion\">8. Conclusion<\/h2>\n<div class=\"bd-anchor\" id=\"conclusion\"><\/div>\n<p>In this article, we discussed the tools Spring provides for the management of the multiple implementations of the interface during autowiring. These tools and techniques enable a more dynamic approach when designing a Spring Boot application. However, like with every instrument, we should ensure their necessity, as careless use can introduce bugs and complicate long-term support.<\/p>\n<p>As always, the examples are available <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/github.com\/eugenp\/tutorials\/tree\/master\/spring-di-4\">over on GitHub<\/a>.<\/p>\n<p><Img align=\"left\" border=\"0\" height=\"1\" width=\"1\" alt=\"\" style=\"border:0;float:left;margin:0;padding:0;width:1px!important;height:1px!important;\" hspace=\"0\" src=\"https:\/\/feeds.feedblitz.com\/~\/i\/897875552\/0\/baeldung\"><\/p>\n<div style=\"clear:both;padding-top:0.2em;\"><a title=\"Like on Facebook\" href=\"https:\/\/feeds.feedblitz.com\/_\/28\/897875552\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/fblike20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Pin it!\" href=\"https:\/\/feeds.feedblitz.com\/_\/29\/897875552\/baeldung,https%3A%2F%2Fwww.baeldung.com%2Fwp-content%2Fuploads%2F2021%2F10%2FSpring-Featured-Image-08-1024x536.png\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/pinterest20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Post to X.com\" href=\"https:\/\/feeds.feedblitz.com\/_\/24\/897875552\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/x.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Subscribe by email\" href=\"https:\/\/feeds.feedblitz.com\/_\/19\/897875552\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/email20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Subscribe by RSS\" href=\"https:\/\/feeds.feedblitz.com\/_\/20\/897875552\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/rss20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a rel=\"NOFOLLOW\" title=\"View Comments\" href=\"https:\/\/www.baeldung.com\/spring-boot-autowire-multiple-implementations#respond\"><img decoding=\"async\" height=\"20\" style=\"border:0;margin:0;padding:0;\" src=\"https:\/\/assets.feedblitz.com\/i\/comments20.png\"><\/a>&#160;<a title=\"Follow Comments via RSS\" href=\"https:\/\/www.baeldung.com\/spring-boot-autowire-multiple-implementations\/feed\"><img decoding=\"async\" height=\"20\" style=\"border:0;margin:0;padding:0;\" src=\"https:\/\/assets.feedblitz.com\/i\/commentsrss20.png\"><\/a>&#160;<\/div>\n\n<h2><b>Commercials Cooperation Advertisements:<\/b><\/h2>\r\n<p><br>(1) IT Teacher IT Freelance<br> <\/p>\r\n<a href=https:\/\/itteacheritfreelance.hk\/wordpress><img src=http:\/\/gamefootballmobileanimeiphone.com\/wp-content\/uploads\/2023\/09\/ITTeacherITFreelance-Website.png alt=IT\u96fb\u8166\u88dc\u7fd2 java\u88dc\u7fd2 \u70ba\u5927\u5bb6\u914d\u5c0d\u96fb\u8166\u88dc\u7fd2,IT freelance, \u79c1\u4eba\u8001\u5e2b, PHP\u88dc\u7fd2,CSS\u88dc\u7fd2,XML,Java\u88dc\u7fd2,MySQL\u88dc\u7fd2,graphic design\u88dc\u7fd2,\u4e2d\u5c0f\u5b78ICT\u88dc\u7fd2,\u4e00\u5c0d\u4e00\u79c1\u4eba\u88dc\u7fd2\u548cFreelance\u81ea\u7531\u5de5\u4f5c\u914d\u5c0d\u3002\/><\/a><p><a href=https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/findteacher>\u7acb\u523b\u8a3b\u518a\u53ca\u5831\u540d\u96fb\u8166\u88dc\u7fd2\u8ab2\u7a0b\u5427! <\/a><br>\r\n\r\n\u7535\u5b50\u8ba1\u7b97\u673a -\u6559\u80b2 -IT \u96fb\u8166\u73ed\u201d ( IT\u96fb\u8166\u88dc\u7fd2 ) \u63d0\u4f9b\u4e00\u500b\u65b9\u4fbf\u7684\u7535\u5b50\u8ba1\u7b97\u673a \u6559\u80b2\u5e73\u53f0, \u70ba\u5927\u5bb6\u914d\u5c0d\u4fe1\u606f\u6280\u672f, \u96fb\u8166 \u8001\u5e2b, IT freelance \u548c programming expert. \u8b93\u5927\u5bb6\u65b9\u4fbf\u5730\u5c31\u80fd\u627e\u5230\u5408\u9069\u7684\u96fb\u8166\u88dc\u7fd2, \u96fb\u8166\u73ed, \u5bb6\u6559, \u79c1\u4eba\u8001\u5e2b.  <br>\r\n\r\nWe are a education and information platform which you can find a IT private tutorial teacher or freelance. <br>\r\n\r\nAlso we provide different information about information technology, Computer, programming, mobile, Android, apple, game, movie, anime, animation\u2026 \r\n<\/p>\n<p><br>(2) ITSec<br> <\/p><a href=https:\/\/itsec.vip><img src=http:\/\/gamefootballmobileanimeiphone.com\/wp-content\/uploads\/2023\/09\/ITSec-Main-Promotion-Image.png alt= https:\/\/itsec.vip\/\r\nSecure Your Computers from Cyber Threats and mitigate risks with professional services to defend Hackers.  \r\nITSec provide IT Security and Compliance Services, including IT Compliance Services, Risk Assessment, IT Audit, Security Assessment and Audit, ISO 27001 Consulting and Certification, GDPR Compliance Services, Privacy Impact Assessment (PIA), Penetration test, Ethical Hacking, Vulnerabilities scan, IT Consulting, Data Privacy Consulting, Data Protection Services, Information Security Consulting, Cyber Security Consulting, Network Security Audit, Security Awareness Training.\/><\/a> \r\n<br><br> \r\n<p><a href=https:\/\/itsec.vip>www.ITSec.vip<\/a> <br> <br> \r\n<p><a href=https:\/\/sraa.com.hk>www.Sraa.com.hk<\/a> <br> <br> \r\n<p><a href=https:\/\/itsec.hk>www.ITSec.hk<\/a> <br> <br> \r\n<p><a href=https:\/\/penetrationtest.hk>www.Penetrationtest.hk<\/a> <br> <br> \r\n<p><a href=https:\/\/itseceu.uk>www.ITSeceu.uk<\/a> <br> <br> \r\nSecure Your Computers from Cyber Threats and mitigate risks with professional services to defend Hackers. <br><br>\r\nITSec provide IT Security and Compliance Services, including IT Compliance Services, Risk Assessment, IT Audit, Security Assessment and Audit, ISO 27001 Consulting and Certification, GDPR Compliance Services, Privacy Impact Assessment (PIA), Penetration test, Ethical Hacking, Vulnerabilities scan, IT Consulting, Data Privacy Consulting, Data Protection Services, Information Security Consulting, Cyber Security Consulting, Network Security Audit, Security Awareness Training. \r\n<br><br>Contact us right away. <br><br>Email (Prefer using email to contact us): <br>SalesExecutive@ITSec.vip<\/p>","protected":false},"excerpt":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/www.baeldung.com\/wp-content\/uploads\/2021\/10\/Spring-Featured-Image-08-1024x536.png\" class=\"webfeedsFeaturedVisual wp-post-image\" alt=\"\"><\/p>\n<p>Quick tutorial on how to autowire an interface with multiple implementations in Spring Boot.<\/p>\n<div><a title=\"Like on Facebook\" href=\"https:\/\/feeds.feedblitz.com\/_\/28\/897875552\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/fblike20.png\"><\/a>\u00a0<a title=\"Pin it!\" href=\"https:\/\/feeds.feedblitz.com\/_\/29\/897875552\/baeldung,https%3A%2F%2Fwww.baeldung.com%2Fwp-content%2Fuploads%2F2021%2F10%2FSpring-Featured-Image-08-1024x536.png\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/pinterest20.png\"><\/a>\u00a0<a title=\"Post to X.com\" href=\"https:\/\/feeds.feedblitz.com\/_\/24\/897875552\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/x.png\"><\/a>\u00a0<a title=\"Subscribe by email\" href=\"https:\/\/feeds.feedblitz.com\/_\/19\/897875552\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/email20.png\"><\/a>\u00a0<a title=\"Subscribe by RSS\" href=\"https:\/\/feeds.feedblitz.com\/_\/20\/897875552\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/rss20.png\"><\/a>\u00a0<a rel=\"NOFOLLOW\" title=\"View Comments\" href=\"https:\/\/www.baeldung.com\/spring-boot-autowire-multiple-implementations#respond\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/comments20.png\"><\/a>\u00a0<a title=\"Follow Comments via RSS\" href=\"https:\/\/www.baeldung.com\/spring-boot-autowire-multiple-implementations\/feed\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/commentsrss20.png\"><\/a>\u00a0<\/div>\n","protected":false},"author":2156,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","footnotes":""},"categories":[22],"tags":[61,122,127,129,124,128,125,132,131,133,126,130,123,66,94,88,97,56,64,65,60,112,40,75,95,104,33,120,105,101,98,115,30,29,41,86,70,69,68,72,71,26,118,108,87,46,55,48,52,54,51,50,83,62,58,57,109,35,59,63,85,79,82,96,80,27,81,114,44,42,43,45,38,39,110,117,100,111,116,73,89,90,92,91,93,84,78,37,102,34,36,77,67,74,99,113,119,28,121,32,47,49,53,103,31,76],"class_list":["post-126739","post","type-post","status-publish","format-standard","hentry","category-mobile","tag-airpods","tag-anime","tag-anime-characters","tag-anime-cosplay","tag-anime-edits","tag-anime-merchandise","tag-anime-movies","tag-anime-news","tag-anime-recommendations","tag-anime-reviews","tag-anime-series","tag-anime-streaming","tag-animes","tag-app-store","tag-app-store-samsung","tag-appgallery","tag-appgallery-oneplus","tag-apple","tag-apple-music","tag-apple-tv","tag-apple-watch","tag-bbc-sport","tag-best-mobile-games","tag-bixby","tag-bixby-xiaomi","tag-champions-league","tag-cyberpunk","tag-cyberpunk-2077","tag-fantasy-football","tag-fifa","tag-football","tag-formula-1","tag-fortnite","tag-free-fire","tag-free-mobile-games","tag-freebuds-pro","tag-galaxy-a52","tag-galaxy-note-20","tag-galaxy-s21","tag-galaxy-watch-4","tag-galaxy-z-fold-3","tag-game","tag-games","tag-golf","tag-harmonyos","tag-how-to-backup-iphone","tag-how-to-factory-reset-iphone","tag-how-to-reset-iphone","tag-how-to-restore-iphone","tag-how-to-unlock-iphone","tag-how-to-unlock-iphone-5","tag-how-to-unlock-iphone-6","tag-huawei","tag-ios","tag-ipad","tag-iphone","tag-live-soccer","tag-lol","tag-macbook","tag-macos","tag-mate-40-pro","tag-mi-11-lite","tag-mi-home-security-camera-basic-1080p","tag-mi-home-security-camera-basic-1080p-huawei","tag-mi-smart-band-6","tag-minecraft","tag-miui","tag-mlb-scores","tag-mobile-game-design","tag-mobile-game-development","tag-mobile-game-marketing","tag-mobile-game-monetization","tag-mobile-games","tag-mobile-gaming","tag-nba-scores","tag-nba-standings","tag-nfl","tag-nfl-scores","tag-nhl-scores","tag-one-ui","tag-oneplus","tag-oneplus-9-pro","tag-oneplus-buds-pro","tag-oneplus-nord-ce-5g","tag-oxygenos","tag-p40-pro-plus","tag-poco-x3-pro","tag-pokemon","tag-premier-league","tag-pubg","tag-pubg-mobile","tag-redmi-note-10-pro","tag-samsung","tag-samsung-pay","tag-soccer","tag-sports","tag-steam","tag-steeam","tag-top-10-anime","tag-valorant","tag-when-do-the-iphone-7-come-out","tag-when-does-the-iphone-7-come-out","tag-when-is-the-iphone-7-coming-out","tag-world-cup","tag-xbox-series-x","tag-xiaomi"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/posts\/126739","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/users\/2156"}],"replies":[{"embeddable":true,"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/comments?post=126739"}],"version-history":[{"count":0,"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/posts\/126739\/revisions"}],"wp:attachment":[{"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/media?parent=126739"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/categories?post=126739"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gamefootballmobileanimeiphone.com\/index.php\/wp-json\/wp\/v2\/tags?post=126739"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}