2011-12-20 134 views
1

我目前使用CDI(焊接)與tomcat 6作爲servlet容器。在配置中使用WeldLifecycleListener,進行依賴性注入非常簡單。彈簧自動依賴注入

我的問題是:是否有相當於Spring的WeldLifecycleListener避免從ApplicationContext實例化bean?

+0

「避免應用程序上下文」是什麼意思? –

回答

1

我不知道WeldLifecycleListener但可以給指針自動依賴注入

  1. 你可以使用Spring配置文件中的Spring beans的自動裝配屬性。閱讀關於此here
  2. 您還可以使用@Autowired註釋用於通過類型自動裝配和@Qualifier以及它的名稱來查找bean。
  3. @Resource註釋可用於按名稱自動佈線。

  4. 如果您不想在Spring配置中定義任何bean,請使用組件掃描來自動檢測組件,並在bean上使用註釋@Component - 此+ @ Autowire/@ Resource將簡化您的配置。

2

在春季3,你可以使用JSR-330註釋,比如@Named@Inject(見http://blog.springsource.com/2009/09/29/spring-framework-3-0-rc1-released/)。

@Named註解的類將被自動檢測,並且當你通過添加以下到彈簧配置文件使組件掃描實例:

<context:component-scan base-package="${base-package}" /> 

其中${base-package}是包含所有部件的封裝(或者直接或者在子包中)。

+0

感謝迄今爲止的答案,但我的問題不是如何定義bean(java,xml,annotation)。到目前爲止,這沒有問題。 有了Spring,我只設法解決了從applicationContext獲得的bean中的依賴問題。例如,以下工作: ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()); testBean =(TestBean)ctx.getBean(「testBean」); testBean中的依賴關係已正確解析。但是,我不能直接@Inject testBean而不調用allicationContext。 – Sordul

+0

爲了澄清,你有servlet是由CDI管理的,但希望Spring向它們注入依賴關係?我不是CDI專家,但我想你必須選擇通過CDI或Spring來管理它們,否則你將不得不添加自定義代碼來獲取spring上下文並注入依賴關係。 –

+0

雖然也許如果你添加'@ Component'或者'@ Controller'給你想要注入依賴項的類(也就是你正在編寫'ctx = WebApplicationContext ...'的類)。 –