我正在寻找一种优雅的方式,在标准spring服务中定义字段
如果没有龙目,我们的服务如下:
@Service
public class ServiceA {
private final String applicationName;
private final SpecialHandler specialHandler;
private final ServiceC serviceC;
public ServiceA(final ConfigBean config,
final ServiceB serviceB,
final ServiceC serviceC) {
this.applicationName = config.getBaseConfig().getApplicationInfo().getName();
this.specialHander = serviceB.getSpecialForAppName(this.applicationName);
// PROBLEM: each direct dependency forces us to write more and more manual code
this.serviceC = serviceC;
}
}
现在,我们的团队只想使用lombok构造函数(这样我们就可以轻松地添加其他服务)。上面的服务现在看起来是这样的:
@Service
@RequiredArgsConstructor
public class ServiceA {
private final ServiceC service;
// ^- with lombok, this is very pretty and simpel
private final ConfigBean config;
private final SpecialHandler specialHandler;
// ^- PROBLEM: these fields only used in the "createFields()"-method
// can we inline them somehow?
private String applicationName;
private SpecialHandler specialHanlder;
// ^- PROBLEM: these fields are not final anymore
// can we "make fields final again"?
@PostConstruct
public void createFields() { // maybe we can put parameters to the post-construct?
this.applicationName = this.config.getBaseConfig().getApplicationInfo().getName();
this.specialHander = this.serviceB.getSpecialForAppName(this.applicationName);
}
}
如何解决这些问题(在源代码注释中提到)?
我在很多项目中都看到了这个“问题”。我上面提到的变体是我看到的唯一解决方案。当增加字段数量时,这两种解决方案都变得更加丑陋。
Lombok只为您编写样板代码。这意味着,一旦你有任何非琐碎的事情要做,你就不能再使用它了。因此,如果您想保持您的字段在构造函数的最终计算,您将不得不手动编写构造函数。
据我所知,@PostConstruct方法也不能接受任何参数。
有两个可能的轨道可以遵循:
在React中,想做依赖注入(Dependency Injection)其实相当简单。请看下面这个例子: // Title.jsx export default function Title(props) { return <h1>{ props.title }</h1>; } // Header.jsx import Title from './Title.jsx'; export defa
依赖注入 Dependency Injection is a strong mechanism, which helps us easily manage dependencies of our classes. It is very popular pattern in strongly typed languages like C# and Java. 依赖注入是一个很强大的机制,该机制可以帮
简介 Hyperf 默认采用 hyperf/di 作为框架的依赖注入管理容器,尽管从设计上我们允许您更换其它的依赖注入管理容器,但我们强烈不建议您更换该组件。 hyperf/di 是一个强大的用于管理类的依赖关系并完成自动注入的组件,与传统依赖注入容器的区别在于更符合长生命周期的应用使用、提供了 注解及注解注入 的支持、提供了无比强大的 AOP 面向切面编程 能力,这些能力及易用性作为 Hyper
出自维基百科 Wikipedia: 依赖注入是一种允许我们从硬编码的依赖中解耦出来,从而在运行时或者编译时能够修改的软件设计模式。 这句解释让依赖注入的概念听起来比它实际要复杂很多。依赖注入通过构造注入,函数调用或者属性的设置来提供组件的依赖关系。就是这么简单。
主要内容:什么是依赖注入,value,factory,provider,constant,实例,AngularJS 实例 - factory,AngularJS 实例 - provider什么是依赖注入 wiki 上的解释是:依赖注入(Dependency Injection,简称DI)是一种软件设计模式,在这种模式下,一个或更多的依赖(或服务)被注入(或者通过引用传递)到一个独立的对象(或客户端)中,然后成为了该客户端状态的一部分。 该模式分离了客户端依赖本身行为的创建,这使得程序设计变得松耦
我要的不是意见而是事实 我正在尝试选择一个新的DI。我有一些Guice的经验。总的来说,我想说它的一个优点是,当从scala需要与Java集成时,Guice可以完成这项工作。所以对于互操作性来说,这是一个明显的优势。 如果我们抛开这个互操作性问题不谈,谁能给我简单的比较一下 scaladi,guice,Macwire? 我对了解烫伤症还是新手。我发现令人惊讶的一件事是必须通过隐式参数在喷油器周围移