不使用spring框架的依赖注入

时间:2014-03-19 15:26:46

标签: java spring dependency-injection

我有一个相当幼稚的问题。我们可以使用核心java注入依赖关系,就像我们使用Spring框架注入一样吗?

现在,我这样做:

在web.xml中:

<context-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

spring applicationcontext.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context.xsd">

    <bean id="mybean" class="com.test.app.MyService" />

</beans>

我将使用注入的bean的类:

public class MyResource {

    @Autowired
    private MyService mybean;

     public MyResponse doService(MyRequest req) {
           mybean.doBusiness(req);
     }
}

}

那么,有没有办法可以使用核心java进行这种依赖注入?我一直在读CDI,但不太懂。此外,它也感觉它不是直接替代Spring所做的事情。

如果我错了,请帮助并纠正我。

6 个答案:

答案 0 :(得分:3)

javax.inject(JSR-330)和CDI(JSR-299,JSR-346)只是API,而不是实现。这些API的实现在Java SE中有效(与Java EE相反,我认为这是“核心Java”的意思),例如Weld SE

CDI建立在JSR-330之上。

虽然javax.inject仅涉及基本注入,并未涉及范围和生命周期,但可以说CDI和Spring Core或多或少具有相同的功能。两者都可以在Java SE中使用。

答案 1 :(得分:2)

@Autowired是一个未标准化的Spring注释。相应的标准注释是来自javax.inject的@Inject

除了Spring,Google Guice也支持javax.inject

另一个非常轻量级的依赖注入框架(不支持javax.inject)是PicoContainer

答案 2 :(得分:2)

您还可以查看HK2,它是一个完整的JSR-330并在基本JDK中运行。它具有基本JDK的功能,例如安全性。点击此处了解更多信息:

HK2 Main Page

答案 3 :(得分:1)

依赖注入是一种模式。你想要的是什么,以及Spring的基础,是一个控制反转容器。

不,Java SE和Java EE不提供这样的Inversion of Control容器。

Java EE确实提供了CDI形式的API,用于依赖注入。您可以使用名为Weld的参考实现。

其他答案列出了许多其他IoC容器。

答案 4 :(得分:0)

也许你想看看javax.inject。 API可作为单独的jar使用,并且存在一些依赖于和使用此jar的依赖注入框架。

其中包括Guava和更轻量级Dagger

您的@Autowired在javax.inject语言中为@Inject;上面的两个框架允许注入纯Java(也许是其他人,不知道因为不感兴趣)。

希望这会有所帮助......

答案 5 :(得分:0)

是的,你可以! JSR 330完全谈论这一点。

您还可以查看Spring documentation