2011-12-20 137 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 ...'的类)。 –