小编Tim*_*thy的帖子

在多模块环境中使用依赖注入(通过Guice)

我在涉及Guice并避免使用非Guice单身人士方面有些两难。考虑那里有3个模块的多模块项目:sharedfrontendbackend。无论是frontendbackend使用的一个实例Profiling的类的内部shared模块(其时间的方法,和在整个项目中广泛使用)。

几乎每个类都需要使用此Profiling实例(包括User用户连接时动态创建的对象)。

如果每个单独的类都需要该类的一个实例Profiling,则执行该方法的不同方法会有一些缺点:

解决方案1(在构造函数中,复制到实例字段):

private final Profiling profiling;

@Inject
public User(Profiling profiling, String username)
Run Code Online (Sandbox Code Playgroud)

缺点:您必须Profiling每个构造函数包含一个对象。这很麻烦,而且毫无意义。您还必须Injector静态存储(或注入)Guice ,以便您可以动态创建User对象,而不仅仅是在首次加载程序时。

解决方案2(仅作为实例字段):

@Inject
private Profiling profiling;

public User(String username)
Run Code Online (Sandbox Code Playgroud)

缺点:与上面类似,您必须使用Guice Injector实例化每个对象。这意味着要User动态创建对象,需要在创建User对象的类中使用Injector的实例。

解决方案3(作为一个(主)类中的静态字段,由我们手动创建)

public static final Profiling PROFILING; // Can also use a get method

public Application() {
    Application.PROFILING …
Run Code Online (Sandbox Code Playgroud)

java dependency-injection structure guice

1
推荐指数
1
解决办法
1176
查看次数

标签 统计

dependency-injection ×1

guice ×1

java ×1

structure ×1