我有一个相当幼稚的问题。我们可以使用核心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所做的事情。
如果我错了,请帮助并纠正我。
答案 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的功能,例如安全性。点击此处了解更多信息:
答案 3 :(得分:1)
依赖注入是一种模式。你想要的是什么,以及Spring的基础,是一个控制反转容器。
不,Java SE和Java EE不提供这样的Inversion of Control容器。
Java EE确实提供了CDI形式的API,用于依赖注入。您可以使用名为Weld的参考实现。
其他答案列出了许多其他IoC容器。
答案 4 :(得分:0)
也许你想看看javax.inject。 API可作为单独的jar使用,并且存在一些依赖于和使用此jar的依赖注入框架。
您的@Autowired
在javax.inject语言中为@Inject
;上面的两个框架允许注入纯Java(也许是其他人,不知道因为不感兴趣)。
希望这会有所帮助......
答案 5 :(得分:0)
是的,你可以! JSR 330完全谈论这一点。
您还可以查看Spring documentation。