获取没有@Autowired的应用程序组件

时间:2012-04-21 06:39:06

标签: java spring autowired

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

说我想使用一些DAO实现。

在服务类我经常写:

 @Autowired 
 someDaoInterface generalDao;

然后我通常打电话

 generalDao.someInterfaceMethod(someParam param);

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

它是否只是愚蠢:new ApplicationContext(pathToXml)然后使用.getBean或其他方式?

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

如果你有@Controller处理程序,那么你需要调用服务类的方法吗?所以它们应该以某种方式从上下文中检索,到目前为止唯一的方法是使用@Autowired?然后我还想填充Service类,就像我在前面的例子中用DAO类所说的那样,它们也需要从应用程序上下文中检索,所以我可以自己编写服务类的逻辑。过去人们会如何做到这一点?

我认为@Autowired是解决问题的唯一方法,不是因为自动连线也很方便 - 我对XML完全没问题。

1 个答案:

答案 0 :(得分:0)

您仍然可以通过property或constructor参数明确地连接它。 (无论如何,如果容器中存在歧义,则自动装配不会起作用)

当然,您可以在Java代码中使用应用程序上下文和getBean(),但它违反了DI模式并使所有弹簧内容无用。 DI的目的是将您的业务loginc与实现细节分离 - 它不是业务逻辑,而是依赖关系的来源和位置。依赖性就在那里。

通过使用ApplicationContext.getBean(),您将破坏此模式,并将依赖项引入:

  • spring本身
  • 您的配置名称

完成此操作后,您可以放弃使用DI和弹簧,因为您刚刚取消了DI提供给您的所有优惠。 (BTW,@ Autowired还引入了对spring的依赖,并且违反了DI模式,它也暗示只有一个实例可用)

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