当前位置: 首页 > 后端技术 > Java

「SpringAuthentication」SpringDependencyInjection

时间:2023-04-01 17:03:03 Java

每个基于Java的应用程序都有一些对象,它们一起工作以呈现最终用户所见的工作应用程序。在编写复杂的Java应用程序时,应用程序类应尽可能独立于其他Java类,以增加重用这些类的可能性,并在单元测试时独立于其他类对其进行测试。依赖注入(或有时称为连接)有助于将这些类粘合在一起,同时保持它们分离。假设您有一个带有文本编辑器组件的应用程序,并且您想要提供拼写检查。您的标准代码如下所示-publicclassTextEditor{privateSpellCheckerspellChecker;publicTextEditor(){spellChecker=newSpellChecker();我们在这里所做的是在TextEditor和SpellChecker之间创建依赖关系。在控制反转的情况下,我们会做这样的事情-publicclassTextEditor{privateSpellCheckerspellChecker;publicTextEditor(SpellCheckerspellChecker){this.spellChecker=spellChecker;}}在这里,TextEditor不应该担心SpellChecker的实现。SpellChecker将独立实现,并在实例化TextEditor时提供给TextEditor。整个过程由Spring框架控制。在这里,我们从TextEditor中删除了完全控制并将其保留在其他地方(即XML配置文件),并且依赖项(即类SpellChecker)通过类构造函数注入到类TextEditor中。所以控制流已经被依赖注入(DI)“反转”了,因为你已经有效地将依赖委托给了一些外部系统。第二种注入依赖项的方法是通过TextEditor类的Setter方法,我们将在其中创建SpellChecker实例。该实例将用于调用setter方法来初始化TextEditor的属性。因此,DI存在两个主要变体,下面的两个小节将用示例来介绍它们-不是。依赖注入类型和描述1基于构造函数的依赖注入基于构造函数的DI是在容器调用具有多个参数的类构造函数时完成的,每个参数表示对另一个类的依赖。2Setter-basedDependencyInjectionSetter-basedDI是容器在调用无参构造函数或无参静态工厂方法实例化bean后调用bean的setter方法来实现的。您可以混合使用基于DI的Constructor和Setter,但是使用构造函数参数作为强制依赖项并将setter作为可选依赖项是一个很好的经验法则。使用DI原则,当对象提供依赖项时,代码更清晰,解耦更有效。该对象不查找其依赖项,也不知道依赖项的位置或类,而是由Spring框架处理一切。

猜你喜欢