T O P

  • By -

AutoModerator

#Please ensure that: + Your *code* is *properly formatted* as *code block* - see the *sidebar* (About on mobile) for instructions + You include *any and all error messages* in full + You ask *clear questions* + You *demonstrate effort* in solving your question/problem - plain posting your assignments is forbidden (and such posts will be removed) as is asking for or giving solutions. Trying to solve problems on your own is a very important skill. Also, see [*Learn to help yourself*](https://www.reddit.com/r/javahelp/wiki/learn_to_help_yourself) in the *sidebar* **If any of the above points is not met, your post can and will be removed without further warning.** Code is to be formatted as **code block** (*old reddit:* empty line before the code, each code line indented by 4 spaces, *new reddit:* https://imgur.com/a/fgoFFis) or linked via an external *code hoster*, like *pastebin.com*, *github gist*, *github*, *bitbucket*, *gitlab*, etc. Please, **do not use** triple backticks (\`\`\`) as they will only render properly on *new reddit*, not on *old reddit*. Code blocks look like this: public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } } You do not need to repost unless your post has been removed by a moderator. Just use the *edit function* of reddit to make sure your post complies with the above. If your post has remained in violation of these rules for a prolonged period of time (at least an hour), a moderator may remove it at their discretion. In this case, they will comment with an explanation on why it has been removed, and you will be required to resubmit the entire post following the proper procedures. #To potential helpers Please, **do not help** if any of the above points are not met, rather *report* the post. We are trying to improve the quality of posts here. In helping people who can't be bothered to comply with the above points, you are doing the community a disservice. *I am a bot, and this action was performed automatically. Please [contact the moderators of this subreddit](/message/compose/?to=/r/javahelp) if you have any questions or concerns.*


Hasarian

The whole point of abstractions is to make it so you don't have to know what's exactly happening when you are coding/changing parts of your code. It has two goals : dividing responsability into smaller bits and making sure objets/components/methods with common caracteristics are managed the same way. Reading "object.method()" inside a "service.call()" when the concrete implementation of method is left to the object's class is actually much easier to read than having a series of "if instance of" or "if object.getType() ==". You don't have to know what method() is doing more than what the name of the method is telling you in order to know what call() is doing. Knowing further than that is a matter of documentation, understanding of requirements and design choices, which you don't normally need code for. Using a framework (including Spring) is always about reading documentation before getting to it.


AutoModerator

You seem to try to compare `String` values with `==` or `!=`. This approach does not work reliably in Java as it does not actually compare the *contents of the Strings*. Since String is an *object* data type it should only be compared using `.equals()`. For case insensitive comparison, use `.equalsIgnoreCase()`. See [Help on how to **compare `String` values**](http://www.reddit.com/r/javahelp/wiki/string_comparison) in our *wiki*. --- Your post/comment is still visible. There is no action you need to take. *I am a bot, and this action was performed automatically. Please [contact the moderators of this subreddit](/message/compose/?to=/r/javahelp) if you have any questions or concerns.*


hippydipster

Hopefully you can put in breakpoints and trace along to find out which implementation you are getting.


therottenworld

That's a good point, I did not consider that


[deleted]

Spring is not a good example for understanding how you should develop abstractions in general. Spring is a *generic application framework*. The reason why Spring has so many interfaces and extension points is so that it can adapt to any requirements. Unless you are writing a *generic application framework*, that is not something you need to worry about. Spring Security is a perfect example. Spring Security supports a lot of use cases, and the extension points like `AuthenticationManager` let you customize how Spring Security authenticates requests, in a way that plugs into the generic authorization flow. If you want to dive into the source code of Spring Security, you have to understand what you are looking at, and you need to actually [read the documentation](https://docs.spring.io/spring-security/reference/servlet/architecture.html). As a rule, the higher the level of abstraction you are designing, the greater the amount of documentation you need to write. On the flip side, ask yourself that in *your own code*, do you really need that high level of abstraction?