Java中无需注解实现依赖注入(DI)的可行方案及现有框架
回答
当然有办法在Java中实现依赖注入(DI),不用给那些原本不该添加注解的类硬加注解!不过先聊聊你提到的Spring Boot常规做法——确实,不少人一开始接触的时候,会以为必须给构造方法加@Inject或者@Autowired,还得给实现类加@Service这类注解才能注册到DI容器里,就像你举的例子:
@Inject // 或者在Spring Boot里用@Autowired public MyInjectedClass(IThing1 thing1, IThing2 thing2) { // 构造逻辑 }
但其实Spring Boot本身就提供了摆脱这些注解的方案,还有其他DI框架也支持无注解的配置方式:
- Spring Boot自动构造注入(Spring 4.3+):如果你的类只有一个构造方法,Spring会自动识别这个构造方法并完成依赖注入,根本不需要额外加
@Autowired或@Inject!这就省去了给构造方法加注解的麻烦,业务类能保持更干净的状态。 - Java配置类完全接管Bean注册:你可以通过
@Configuration注解的配置类,手动注册所有需要的Bean,完全不用给业务类加@Service、@Component这类注解。举个例子:
@Configuration public class AppConfig { @Bean public MyInjectedClass myInjectedClass(IThing1 thing1, IThing2 thing2) { return new MyInjectedClass(thing1, thing2); } @Bean public IThing1 thing1() { return new Thing1Impl(); } @Bean public IThing2 thing2() { return new Thing2Impl(); } }
在这个配置里,MyInjectedClass、Thing1Impl、Thing2Impl都是纯POJO类,不需要任何注解就能被Spring管理并完成依赖注入。
- 其他无注解DI框架:比如Google Guice,它通过模块(Module)来定义依赖绑定关系,业务类完全不需要加任何注解。你只需要编写模块类配置依赖,Guice就会自动处理注入逻辑,让你的业务代码保持纯粹。
内容的提问来源于stack exchange,提问作者Josh M.
相关产品推荐
相关产品推荐

