1

您将如何从 .xml 配置中提取 2.5 之前的版本?这让我很困扰,因为如果@Autowired从我的武器库中删除,我真的不知道该怎么做。

假设我想使用一些 DAO 实现。

在服务类中,我通常会写:

 @Autowired 
 someDaoInterface generalDao;

然后我通常会打电话

 generalDao.someInterfaceMethod(someParam param);

我如何从 Spring 2.0 中的配置中提取实现以使用此方法?

它是否像just一样愚蠢:new ApplicationContext(pathToXml)然后使用.getBean还是有其他方法?

为什么我要求从配置文件中取出 bean?因为在 Spring MVC 中,如何在不从应用程序上下文中获取 bean 的情况下执行逻辑。

如果您有@Controller处理程序,那么您需要调用服务类的方法吗?所以应该以某种方式从上下文中检索它们,到目前为止唯一的方法是使用@Autowired? 然后我还想用 DAO 类填充前面示例中所述的服务类,并且还需要从应用程序上下文中检索它们,因此我可以自己为服务类编写逻辑。过去人们会怎么做?

我认为这@Autowired是取出某些东西的唯一方法,而不是因为自动连接很方便——我对 XML 完全没问题。

4

1 回答 1

0

您仍然可以选择通过属性或构造函数参数显式连接它。(无论如何,如果您的容器中存在歧义,自动装配将无法正常工作)

当然,您可以在 Java 代码中使用应用程序上下文和 getBean(),但它违反了 DI 模式并使所有 spring 的东西都无用。DI 的目的是将您的业务登录与实现细节分离 - 它不是业务逻辑,而是它的依赖关系来自何处以及来自何处。依赖关系就在那里。

通过使用 ApplicationContext.getBean() 您打破了这种模式,并引入了对:

  • 弹簧本身
  • 你的配置名称

完成此操作后,您也可以放弃使用 DI 和 spring,因为您只是取消了 DI 提供给您的所有优势。(顺便说一句,@Autowired 还引入了对 spring 的依赖,违反了 DI 模式,这也意味着只有一个实例可用)

另外,答案是:在理想情况下,您的代码中根本不应该引用 spring。没有导入,没有注释 - 只是协作实体的接口。

于 2012-04-21T07:17:11.513 回答