当前位置: 首页 > 知识库问答 >
问题:

Java EE中的依赖注入

方嘉言
2023-03-14

我想,对于一个可以注入的类来说,任何类都必须被注释。但是我看到一个示例演示了一个简单的REST服务,其中注入了一个没有任何注释的类。HelloService没有注释。是豆子吗?它的生命周期范围如何?

 /**
 * A simple CDI service which is able to say hello to someone
 * 
 * @author Pete Muir
 * 
 */
public class HelloService {

String createHelloMessage(String name) {
    return "Hello " + name + "!";
}
}


/**
 * A simple REST service which is able to say hello to someone using HelloService Please     take a look at the web.xml where JAX-RS
 * is enabled And notice the @PathParam which expects the URL to contain /json/David or     /xml/Mary
 * 
 * @author bsutter@redhat.com
 */

@Path("/")
public class HelloWorld {
@Inject
HelloService helloService;

@POST
@Path("/json/{name}")
@Produces("application/json")
public String getHelloWorldJSON(@PathParam("name") String name) {
    System.out.println("name: " + name);
    return "{\"result\":\"" + helloService.createHelloMessage(name) + "\"}";
}

@POST
@Path("/xml/{name}")
@Produces("application/xml")
public String getHelloWorldXML(@PathParam("name") String name) {
    System.out.println("name: " + name);
    return "<xml><result>" + helloService.createHelloMessage(name) + "</result></xml>";
}
}

本例中还有一个问题是,为什么在web.xml中使用“hello”?项目中没有定义名为“Hello”的any类,也没有名为“Hello”的any目录。

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <!-- One of the ways of activating REST Servises is adding these lines.
     The server is responsible for adding the corresponding servlet automatically.
     The class org.jboss.as.quickstarts.html5rest.HelloWorld class has the
     annotation @Path("/") to receive the REST invocation -->
    <servlet-mapping>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
        <url-pattern>/hello/*</url-pattern>
    </servlet-mapping>
</web-app>

共有1个答案

毋澄邈
2023-03-14

您没有提到这是Jave EE6还是7,也没有包括beans.xml文件。

在Java EE6中,只要有META-INF/beans.xml,任何具有公共默认构造函数的类都可以被注入,然后自动成为托管CDI bean。在Java EE7中,bean-discovery-mode=“all”可以在beans.xml中实现同样的功能,请参见此问题

 类似资料:
  • 我有一个控制器 服务接口 我想在我的控制器中使用@autowired来使用该服务,但当我运行应用程序时,我得到以下错误 org.springframework.beans.factory.beanCreationException:创建名为“demo application”的bean时出错:注入autowired依赖项失败;嵌套异常为org.SpringFramework.Beans.Facto

  • 在React中,想做依赖注入(Dependency Injection)其实相当简单。请看下面这个例子: // Title.jsx export default function Title(props) { return <h1>{ props.title }</h1>; } // Header.jsx import Title from './Title.jsx'; export defa

  • 依赖注入 Dependency Injection is a strong mechanism, which helps us easily manage dependencies of our classes. It is very popular pattern in strongly typed languages like C# and Java. 依赖注入是一个很强大的机制,该机制可以帮

  • 简介 Hyperf 默认采用 hyperf/di 作为框架的依赖注入管理容器,尽管从设计上我们允许您更换其它的依赖注入管理容器,但我们强烈不建议您更换该组件。 hyperf/di 是一个强大的用于管理类的依赖关系并完成自动注入的组件,与传统依赖注入容器的区别在于更符合长生命周期的应用使用、提供了 注解及注解注入 的支持、提供了无比强大的 AOP 面向切面编程 能力,这些能力及易用性作为 Hyper

  • 出自维基百科 Wikipedia: 依赖注入是一种允许我们从硬编码的依赖中解耦出来,从而在运行时或者编译时能够修改的软件设计模式。 这句解释让依赖注入的概念听起来比它实际要复杂很多。依赖注入通过构造注入,函数调用或者属性的设置来提供组件的依赖关系。就是这么简单。

  • 问题内容: 我已经阅读了AngularJS文档,但仍然没有我知道的答案。 为什么要使用两次?一次作为数组元素,第二次作为函数参数。 问题答案: 如果缩小此代码: 您将以(类似)结尾: 由于参数名称丢失,因此Angular将无法注入依赖项。 另一方面,如果您将此代码最小化: 您将以: 参数名称可用:Angular的DI可操作。