Comment by nine_k

Comment by nine_k 3 days ago

13 replies

Absolutely. It seems that the author never touched Spring, for instance, or a dependency-injection framework of any kind. Annotations allow to do things in a completely different way, removing tons of boilerplate.

I'd give annotations 9/10 at least.

(And I lost the interest in the rest of the article, given such a level of familiarity with the subject matter.)

__float 3 days ago

My experience using Dagger (2) was so unpleasant that it really soured me on the possible uses of this feature.

I understand the benefits of dependency injection, but to be totally honest I'm more likely to take the Go-style approach of wiring it all up manually, even if it's a bit of extra boilerplate. The indirection and abstractions built up in DI frameworks is rarely worth it IMO.

  • malfist 3 days ago

    Dagger is an absolutely pain in the ass. Its also damn good. Once you understand the archane syntax of their error messages its a lot easier (but still not easy) to use.

    Harder than spring, but less magic than spring

  • vips7L 2 days ago

    Dagger is by far the worst UX experience for a DI framework. Really you should try anything else. For compile time DI like dagger you can try Avaje Inject:

    https://avaje.io/inject/

Groxx 3 days ago

and that's before even touching on the compilation steps they can add, which are a pluggable codegen and macro system that is also integrated into IDEs, which is completely missing from almost every other language.

  • jayd16 3 days ago

    Good stuff. If that excites you, check out Roslyn source generators too.

nmadden 2 days ago

Do you really think that in 26 years of professional Java programming I’d have never touched Spring? I’ve been using Spring since it was first released. I’ve found CVEs in Spring (https://spring.io/security/cve-2020-5408). Trust me when I say that my dislike for Spring (and annotations) is not based on ignorance.

  • nine_k 2 days ago

    It's perfectly possible to work for 26 years with Java and not ever seriously touch Spring, or AWT, or Swing, or the EE bits, etc. Java is sprawling, and a corporate backend developer and a mobile frontend developer may have little intersection in the big libraries, and even the approaches, they use.

    It's perfectly fine to never have touched Spring. What surprised me is not acknowledging that not only are annotations used to do clerical things like @Override or @Deprecated, and not only to do some weird wiring with @Injected or @RequestBody, but allow to add large custom steps in transforming the code. Annotation processors are a huge comptime interface that can do, and routinely does, wild things, unimaginable in Go, the kind of code transformations you would expect in Lisp or Python.

    I suspect the latter should have interesting security implications, too.

    • nmadden 2 days ago

      Java is sprawling now. It wasn’t 26 years ago.

      • nine_k 2 days ago

        Just 20 years ago it was already sprawling.

  • ruszki 2 days ago

    But your dislike can be a lot of other things which are not objective the slightest sense. I mean, your whole article is a subjective piece. Also, stating about something that you “dislike” something as large as Spring as a whole is usually a huge red flag for anybody, just like how liking it without reservations is also a huge red flag.

    • nmadden 2 days ago

      Yes, of course it’s (largely) subjective. But I have actually read much of the source code of Spring. I know it _very_ well.

      • ruszki 2 days ago

        From my point of view, it seemed from you article that you didn't even really understand functional languages in two decades (at least Haskell), which it seemed you to try to state also. So that doesn't matter too much.

        Anyway, I just wanted to say, that it's totally pointless to state something like "I know it well"... Say what's your problem with it, "I don't like it" doesn't add anything to the conversation. I'm quite sure whatever you would say as problems, most people would agree, maybe there would be even tips under it how to prevent it. That will never happen with the kind of comments which you made above.

  • AtlasBarfed 2 days ago

    Spring was a great DI framework that I only use for DI.

    All the big magic annotations are for Enterprise.

    Okay, I've occasionally done a couple spring boot rest, which was ... Fine ... As long as you didn't have to do anything even remotely and complicated, but it keeps you in this weird box of middle performance.

    If you've ever been on any large Enterprise spring Java project, you know what the future of vibe coded enterprise is bringing.