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

为什么我们在这里用@autowire注释class

许彦
2023-03-14

我遇到了这个代码

   @Singleton
    @Controller
    @Autowire(mode = AutowireMode.BY_NAME)
    @Path("/")
    public class RootResource {
    }

我在字段上看到过@autowire,它的意思是按类型自动连接,使用这个字段的类将获得特定类型的bean。

但是在上面的代码中,我不确定是谁在使用这个RootResource bean?

这是spring-泽西Rest项目。

据我所知,spring将创建RootResource的bean,some class将使用这个bean来设置它的属性。(我看不到此bean的任何显式配置)

我的问题是,

1)这个班是谁?

2)这里按名字自动连接完成了,我可以用@resource替换@autowired吗?

共有1个答案

益承颜
2023-03-14

在本例中使用@autowire是指示spring容器通过使用名称与RootResource中的属性名匹配的bean将依赖项注入RootResource。

这类似于使用XML配置的bean元素的autowire属性。假设RootResource具有

@Singleton
@Controller
@Autowire(mode = AutowireMode.BY_NAME)
@Path("/")
public class RootResource{

   private SomeService someService;

   private AnotherService anotherService;

   public void setSomeService(SomeService someService){
      this.someService = someService;
   }

   public void setAnotherService(AnotherService anotherService){
      this.anotherService = anotherService;
   }

 }

容器将尝试查找名为someService和anotherService的bean,并尝试设置相应的属性。请注意,您不需要任何依赖注入注释,属性或字段级别。

您可以使用@resource/@autowired来实现同样的目的。但是,在这种情况下,您必须对字段或setter进行注释。如果在容器中找不到依赖项,注入也会失败

@singleton@controller@autowire(mode=autowiremode.by_name)@path(“/”)公共类RootResource{

   private SomeService someService;

   private AnotherService anotherService;

   @Resource
   public void setSomeService(SomeService someService){
      this.someService = someService;
   }

   @Resource
   public void setAnotherService(AnotherService anotherService){
      this.anotherService = anotherService;
   }

 }

@resource将使用bean名称并返回到类型匹配,而@autowired始终使用类型匹配

还要注意@autowire和@autowired具有不同的行为。不需要在应用程序上下文中明确配置RootResource bean。它将由组件扫描器自动检测,因为它有一个原型注释,即@controoler

 类似资料:
  • 问题内容: 它为什么如此重要?根据XML映射的优势是什么?你能解释这些吗?谢谢。 问题答案: 它不是“强制性”中的重要内容。有优势和劣势的可能性是不同的。 优点: 编译时检查:如今在IDE中,用Java(而不是Xml)编写非常易于使用。启动应用程序(渐进式编译)时,没有发现 更多错别字 ,也没有什么值得记住的( 完成 )… 使用代码进行本地化(类级别):不必打开两个文件(java和xml)以获取完

  • 我在这个论坛上读到了很多关于尝试Autowire pojo时发生的类似问题的文章,通常修复的答案与或/有关。但是,在我的例子中,我设法autowire我的pojo(Mas60010),但我不能autowire或以及可能来自我没有编写代码的包的任何其他对象。 为了简单起见,我只提到。我做错了什么?我想问题要么出在库上,要么出在配置上。注意:请不要仅仅通过显示一个与他自己的POJO相关的问题来指出这个

  • 测试代码为: 测试代码为: 你知道怎么了吗?

  • 我遇到JSON解析错误。我的代码如下: 我从我的检查中得到以下错误: 由于:com,无法分析JSON。谷歌。格森。JsonSyntaxException:java。lang.IllegalStateException:应为BEGIN\u对象,但在第1行第2列为BEGIN\u数组 对于我试图读取的JSON,如果成功,我的应该返回5。 我做错了什么?

  • 问题内容: 我创建了一个用于显示工具提示的指令: 对应功能: 应用于此: 这是我观点的一部分,由拥有者的控制器处理 为什么必须调用才能将更改应用到,该更改是早先声明和初始化的? 问题答案: 因为附加到事件的回调超出了angular的范围;angular不知道该函数何时运行/结束,因此摘要循环永远不会运行。 调用或告诉angular更新绑定并触发任何手表。

  • 我曾多次在CocoaPods中使用。我只是想知道我们为什么要用它?我无法得到这件事的直截了当的答案。