{"id":19562425,"url":"https://github.com/quantummaid/injectmaid","last_synced_at":"2026-03-10T10:06:30.969Z","repository":{"id":45936786,"uuid":"267083847","full_name":"quantummaid/injectmaid","owner":"quantummaid","description":"Lightweight dependency injection framework that does not rely on annotations.","archived":false,"fork":false,"pushed_at":"2024-02-02T20:31:21.000Z","size":492,"stargazers_count":10,"open_issues_count":6,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-14T14:57:00.433Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://quantummaid.de","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/quantummaid.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-05-26T15:40:26.000Z","updated_at":"2025-02-19T10:10:38.000Z","dependencies_parsed_at":"2025-04-27T00:31:51.602Z","dependency_job_id":"f163bcf6-6d2b-4edf-a15b-470d5ef1186d","html_url":"https://github.com/quantummaid/injectmaid","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/quantummaid/injectmaid","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quantummaid%2Finjectmaid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quantummaid%2Finjectmaid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quantummaid%2Finjectmaid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quantummaid%2Finjectmaid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/quantummaid","download_url":"https://codeload.github.com/quantummaid/injectmaid/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quantummaid%2Finjectmaid/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30329698,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T05:25:20.737Z","status":"ssl_error","status_checked_at":"2026-03-10T05:25:17.430Z","response_time":106,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-11T05:14:31.034Z","updated_at":"2026-03-10T10:06:30.947Z","avatar_url":"https://github.com/quantummaid.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=de.quantummaid.injectmaid%3Ainjectmaid-parent\u0026metric=sqale_rating)](https://sonarcloud.io/dashboard?id=de.quantummaid.injectmaid%3Ainjectmaid-parent)\n[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=de.quantummaid.injectmaid%3Ainjectmaid-parent\u0026metric=reliability_rating)](https://sonarcloud.io/dashboard?id=de.quantummaid.injectmaid%3Ainjectmaid-parent)\n[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=de.quantummaid.injectmaid%3Ainjectmaid-parent\u0026metric=security_rating)](https://sonarcloud.io/dashboard?id=de.quantummaid.injectmaid%3Ainjectmaid-parent)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=de.quantummaid.injectmaid%3Ainjectmaid-parent\u0026metric=alert_status)](https://sonarcloud.io/dashboard?id=de.quantummaid.injectmaid%3Ainjectmaid-parent)\n[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=de.quantummaid.injectmaid%3Ainjectmaid-parent\u0026metric=bugs)](https://sonarcloud.io/dashboard?id=de.quantummaid.injectmaid%3Ainjectmaid-parent)\n[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=de.quantummaid.injectmaid%3Ainjectmaid-parent\u0026metric=code_smells)](https://sonarcloud.io/dashboard?id=de.quantummaid.injectmaid%3Ainjectmaid-parent)\n[![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=de.quantummaid.injectmaid%3Ainjectmaid-parent\u0026metric=sqale_index)](https://sonarcloud.io/dashboard?id=de.quantummaid.injectmaid%3Ainjectmaid-parent)\n[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=de.quantummaid.injectmaid%3Ainjectmaid-parent\u0026metric=coverage)](https://sonarcloud.io/dashboard?id=de.quantummaid.injectmaid%3Ainjectmaid-parent)\n[![Last Commit](https://img.shields.io/github/last-commit/quantummaid/injectmaid)](https://github.com/quantummaid/injectmaid)\n[![Maven Central](https://maven-badges.herokuapp.com/maven-central/de.quantummaid.injectmaid/injectmaid/badge.svg)](https://maven-badges.herokuapp.com/maven-central/de.quantummaid.injectmaid/injectmaid)\n[![Code Size](https://img.shields.io/github/languages/code-size/quantummaid/injectmaid)](https://github.com/quantummaid/injectmaid)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![Slack](https://img.shields.io/badge/chat%20on-Slack-brightgreen)](https://quantummaid.de/community.html)\n[![Gitter](https://img.shields.io/badge/chat%20on-Gitter-brightgreen)](https://gitter.im/quantum-maid-framework/community)\n[![Twitter](https://img.shields.io/twitter/follow/quantummaid)](https://twitter.com/quantummaid)\n\n\u003cimg src=\"quantummaid_logo.png\" align=\"left\"/\u003e\n\n# InjectMaid\nInjectMaid is a lightweight dependency injection framework that does not rely on annotations.\n\nFeatures:\n- Injection via public constructor or static factory method\n- Does not call non-public methods nor set non-public fields\n- Support for singletons (lazy and eager initialization)\n- Generics are fully supported\n- Optionally respects `@Inject` and `@Singleton` annotations\n- Advanced scoping\n- Circular dependency detection\n- No expensive classpath scanning\n\nComing soon:\n- Pre-compiled reflections\n- Support for GraalVM\n\nLimitations:\n- No support for field and setter injection\n\n## Getting started\nThe InjectMaid documentation can be found [here](./documentation/01_Usage.md).\n\n## Get in touch\nFeel free to join us on [Slack](https://quantummaid.de/community.html)\nor [Gitter](https://gitter.im/quantum-maid-framework/community) to ask questions, give feedback or just discuss software\narchitecture with the team behind HttpMaid. Also, don't forget to visit our [website](https://quantummaid.de) and follow\nus on [Twitter](https://twitter.com/quantummaid)!\n\n## Frequently asked questions\n\n### Can I use InjectMaid without reflection?\nYes. You can easily [register all types directly](documentation/03_CustomInstantiation.md) and InjectMaid\nwill not perform a single reflective call.\n\n### Is there anything wrong with annotations?\nNo. But like any other concept, there are downsides.\nInjectMaid leaves the choice whether to use them to you. You can configure InjectMaid\nwith annotations, but you don't have to.\n\nHowever, InjectMaid is part of the larger [QuantumMaid application framework](https://quantummaid.de/index.html). QuantumMaid is designed around the concept of\nclean architecture [as defined by Robert C. Martin](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html).\nHere, developers are encouraged to strictly keep infrastructure code separate from business logic (or *domain code* in Domain-Driven Design):\n\n![Clean Architecture](https://blog.cleancoder.com/uncle-bob/images/2012-08-13-the-clean-architecture/CleanArchitecture.jpg)\n\nThis way, infrastructure aspects like databases and public APIs (REST, etc.) are mere replaceable details.\nDirectly annotating business logic with infrastructure annotations like those of [JAX-RS](https://en.wikipedia.org/wiki/Java_API_for_RESTful_Web_Services),\n[CDI](https://docs.oracle.com/javaee/6/tutorial/doc/giwhl.html), [JSON-B](https://javaee.github.io/jsonb-spec/users-guide.html), \n[JSR 303](https://beanvalidation.org/1.0/spec/), [JPA](https://en.wikipedia.org/wiki/Java_Persistence_API), etc.\nremoves this strict separation.\nA common workaround is the creation of wrapper classes whose sole purpose is to carry the\ninfrastructure annotations (controllers, JSON models, etc.). This might be feasible in some cases but introduces a lot\nof boilerplate overhead.\n\nAnother downside to classical annotation processing is its implication on application startup time.\nA classical JEE container needs to scan all classes in a newly deployed application for annotations to determine its configuration.\nThis is inherently slow and leads to long initialization phases.\nWith the introduction of popular serverless hosting options like\n[AWS Lambda](https://aws.amazon.com/lambda/), this becomes a crucial issue. \nProjects like [Google Dagger](https://dagger.dev/), [Quarkus](https://quarkus.io/) and [Micronaut](https://micronaut.io/)\npartially solve that problem by processing annotations at compile time.\nQuantumMaid offers an alternative approach by avoiding configuration by annotations altogether.\n\nHere are additional (independent) blogs with a similar point of view:\n - [https://blog.softwaremill.com/the-case-against-annotations-4b2fb170ed67]()\n - [https://medium.com/@vincent.maurin.fr/java-annotations-and-oop-a2633f3692fb]()\n \nAnother Java application framework that follows an approach without annotations is the [Vlingo Platform](https://vlingo.io/).\nIt is actively maintained by Vaughn Vernon, the author of the\nbook [Implementing Domain-Driven Design](https://www.oreilly.com/library/view/implementing-domain-driven-design/9780133039900/). \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquantummaid%2Finjectmaid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fquantummaid%2Finjectmaid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquantummaid%2Finjectmaid/lists"}