lombok and guice injection

14,695

This is going to add a constructor with all fields as parameters, with @Inject annotation and private modifier, so your code will be expanded to:

import com.google.inject.Inject;

public class SomeClass {
    
    @Inject
    private SomeClass() {
    }
}

This is assuming there are no fields in the class. If you have some fields, then they will be added to the constructor, for example:

import com.google.inject.Inject;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;

@AllArgsConstructor(access = AccessLevel.PRIVATE, onConstructor = @__({ @Inject }))
public class SomeClass {
    private String name;
}

Will become:

import com.google.inject.Inject;

public class SomeClass {
    private String name        

    @Inject
    private SomeClass(String name) {
        this.name = name;
    }
}

Please note, that this won't work in Guice anyway, as it requires a constructor that is not private, per this documentation.

Share:
14,695
Jin
Author by

Jin

Updated on August 10, 2022

Comments

  • Jin
    Jin over 1 year

    I'm new to lombok and guice injection, I could get the general concept but I ran into some code which I don't understand and can't search due to the syntax. Following is the code, can someone help me understand this?

    import com.google.inject.Inject;
    import lombok.AccessLevel;
    import lombok.AllArgsConstructor;
    
    @AllArgsConstructor(access = AccessLevel.PRIVATE, onConstructor = @__({ @Inject }))
    public class SomeClass {
    ...
    }
    

    Thanks!

  • Tavian Barnes
    Tavian Barnes about 7 years
    "Please note, that this won't work in Guice anyway, as it requires a constructor that is not private" This is only true if the constructor doesn't have the @Inject annotation. With the annotation, Guice will handle it fine, except AOP won't work.