有时候,我会找到一些类名,包括 Aware ,例如ApplicationContextAware
和MessageSourceAware
(春天)。这 Aware 是否有任何特殊含义或者它是一个着名的规则?
答案 0 :(得分:15)
那些不是类,是接口。这个名称只是Spring上的一个约定,意味着如果一个特殊的框架对象由框架管理,它将被注入该类。
直接来自ApplicationContextAware的文档:
要由任何希望获得其运行的ApplicationContext通知的对象实现的接口。
在这种情况下,实现此接口的bean将获得对管理应用程序的ApplicationContext的引用。
答案 1 :(得分:5)
将“感知”这样的形容词添加到最后是一种常用于Java接口的命名方案。然后可以通过类来实现,结果是代码更加流畅,可以为人类阅读,例如
class Broker implements ApplicationContextAware { /* ... */ }
很容易看出这个类是某个东西的代理,它知道如何处理应用程序上下文。除此之外,从Java(编译器)的角度来看,“Aware”后缀没有特殊含义。
答案 2 :(得分:2)
您引用的接口似乎是一个特定于Spring的约定,允许对象与创建它们的依赖注入容器进行交互。通过实现接口,一个类表示它想要来自容器的某些信息,同时提供一种传递该信息的方法。
我认为它只是试图为提供此类功能的接口找到通用名称,而不一定是具有特定技术含义的强大约定。
答案 3 :(得分:1)
感知界面的概念:
如果我想要引用像XmlBeanFactory
,ApplicationContext
这样的Spring类的对象...在2个或更多类中,那么有3种可能的方法。
BeanFactories
。在第一种情况下,我们不必要地创建2个BeanFactories。 在第二种情况下,类彼此紧密耦合。
BeanFactoryAware
接口并覆盖名为public BeanFactory setBeanFactory(BeanFactory factory)
的合同方法,那么IOC container
会看到该特殊接口,并通过设置setBeanFactory
引用来调用BeanFactory
方法那个。在上述情况中,上面存在两个问题。