<story><title>Show HN: Java REST without annotations, DI nor reactive streams</title><url>https://github.com/MartinGeisse/grumpyrest</url><text>grumpyrest is a Java REST server framework that does not use annotations, automatic dependency injection or reactive streams, and minimizes the use of reflection. I created this because I got fed up with annotation-mad frameworks that you cannot easily understand, step into or reason about. grumpyrest uses the type system to guide JSON mapping and validation, and (possibly virtual) threads for parallelism. It&amp;#x27;s for grumpy people who don&amp;#x27;t like what REST server programming in Java has become.&lt;p&gt;I made this because I intend to use it in one of my own projects, but at the same time I want to make it available to others to (hopefully) get some good ideas on how to extend it.</text></story><parent_chain><item><author>ivan_gammel</author><text>&amp;gt; On top of that, annotations make it impossible&amp;#x2F;very dificcult to know what code is actually executed (and also it not possible to navigate to the code in an IDE)&lt;p&gt;I have never understood this argument. What is exactly the problem with identifying the executed code?</text></item><item><author>AugustoCAS</author><text>Something that people are missing about annotations: in order to test the annotated class&amp;#x2F;method one needs to start running extra code, sometimes a lot of extra code.&lt;p&gt;Using spring as a toxic example, many things have to be tested using @SpringBootTest which is incredibly slow to start. On top of that because of the use&amp;#x2F;abuse of @MockBean tests stop being thread safe. So one ends up with slow test that need to be run sequencially. I&amp;#x27;m working in a &amp;#x27;start up&amp;#x27; that went the spring boot way and quite simple services take 15+ minutes to run all their tests, which is insane.&lt;p&gt;On top of that, annotations make it impossible&amp;#x2F;very dificcult to know what code is actually executed (and also it not possible to navigate to the code in an IDE). As I rule of thumb, I&amp;#x27;m always happy to swap one annotation for one or two lines code.</text></item></parent_chain><comment><author>darthbanane</author><text>Some of the aspect oriented stuff like cacheable will add a proxy to the annotated bean which can break reasoning about the code.&lt;p&gt;If you inject the bean and call the method you will get caching (because you are using the proxy). If you call the method from within the bean itself however you&amp;#x27;re not using the proxy and you won&amp;#x27;t get caching.&lt;p&gt;It&amp;#x27;s stuff like this on steroids when you start mixing annotations that makes it really difficult to reason about the code.</text></comment>
<story><title>Show HN: Java REST without annotations, DI nor reactive streams</title><url>https://github.com/MartinGeisse/grumpyrest</url><text>grumpyrest is a Java REST server framework that does not use annotations, automatic dependency injection or reactive streams, and minimizes the use of reflection. I created this because I got fed up with annotation-mad frameworks that you cannot easily understand, step into or reason about. grumpyrest uses the type system to guide JSON mapping and validation, and (possibly virtual) threads for parallelism. It&amp;#x27;s for grumpy people who don&amp;#x27;t like what REST server programming in Java has become.&lt;p&gt;I made this because I intend to use it in one of my own projects, but at the same time I want to make it available to others to (hopefully) get some good ideas on how to extend it.</text></story><parent_chain><item><author>ivan_gammel</author><text>&amp;gt; On top of that, annotations make it impossible&amp;#x2F;very dificcult to know what code is actually executed (and also it not possible to navigate to the code in an IDE)&lt;p&gt;I have never understood this argument. What is exactly the problem with identifying the executed code?</text></item><item><author>AugustoCAS</author><text>Something that people are missing about annotations: in order to test the annotated class&amp;#x2F;method one needs to start running extra code, sometimes a lot of extra code.&lt;p&gt;Using spring as a toxic example, many things have to be tested using @SpringBootTest which is incredibly slow to start. On top of that because of the use&amp;#x2F;abuse of @MockBean tests stop being thread safe. So one ends up with slow test that need to be run sequencially. I&amp;#x27;m working in a &amp;#x27;start up&amp;#x27; that went the spring boot way and quite simple services take 15+ minutes to run all their tests, which is insane.&lt;p&gt;On top of that, annotations make it impossible&amp;#x2F;very dificcult to know what code is actually executed (and also it not possible to navigate to the code in an IDE). As I rule of thumb, I&amp;#x27;m always happy to swap one annotation for one or two lines code.</text></item></parent_chain><comment><author>moring</author><text>How &lt;i&gt;do&lt;/i&gt; you identify the executed code? I don&amp;#x27;t even know how to start. You cannot single-step into it from the annotation, nor can you select the annotation, &amp;quot;go to definition&amp;quot; and see the code. You can &amp;quot;find usages&amp;quot; for the annotation which gives you a lot of places that may or may not be the code that gets executed.&lt;p&gt;Imagine I&amp;#x27;m looking at a class that is annotated. What is the next step to find the code that gets executed for the annotations?</text></comment>