java - How to hide service classes and prevent @Autowire? -
i create framework has several default implementations interface.
question: how can hide default implementations of interface, users of framework forced use defaultservice
interface eg injection @autowired defaultservice
?
interface defaultservice { } @component @async @conditionalonnotwebapplication public class myservice1 implements defaultservice { } @component @async @conditionalonwebapplication public class myservice2 implements defaultservice { }
the conditions on services ensure there 1 service wired in each environment.
as @m. deinum commented above making implementation services package private correct solution. not aware spring still sees classes, spring requires public access annotations.
one possible solution seems creating @configuration
class implementations:
@configuration public class defaultserviceconfiguration { @bean @conditionalonnotwebapplication public defaultservice getdefaultservice1() { return new myservice1(); } @bean @conditionalonwebapplication public defaultservice getdefaultservice2() { return new myservice2(); } } public interface defaultservice { } @async protected class myservice1 { } @async protected class myservice2 { }
this way defaultservice
interface visible framework users.
Comments
Post a Comment