首頁  >  問答  >  主體

java - 注解注入和依赖注入是怎么一回事?

最近开始试着做web项目,从别人的代码看到了漫天的注解。真的很难懂。然后硬着头皮各种补知识。大概了解到Spring的ioc思想,通过控制反转,使程序变得解耦。它好像是通过xml来配置具体的bean实现在使用的时候具体的目标类?它的反转控制大概就是这样的思想吧?但是各种问题也跟着来了。注解注入又是怎么回事啊?就想一个关于使用了Jersey的代码。如下:

public Viewable getItemsView(@QueryParam("limit") @DefaultValue("5") int limit, @QueryParam("start") @DefaultValue("5") int start, @Context HttpServletRequest request) {}
            

在参数前加注解是为了什么?而且看了好多文章都说注解可以实现自动注入?又像如下代码:

public class TodoResource {
    @Context
    UriInfo uriInfo;

    @Context
    HttpRequest request;
    @Context
    HttpResponse response;

    String id;

    public TodoResource(UriInfo uriInfo, Request request, String id) {
        this.uriInfo = uriInfo;
        this.request = request;
        this.id = id;
    }
}

uriInfo和request以及response是怎么做到通过注解就能够为其提供具体的对象引用?还有一个最重要的问题,就是容器如何做到通过注解就能够识别我的具体需要的是哪个参数呢?类装载器自动扫描么?那么又是如何为其赋值的?假如属性的权限是private的。如果直接使用注解对属性进行注入是不是就破坏了封装性?而如果我的属性同时具有Httpresponse 这个类的两个对象,response1和response2,那么又如何确定到底bean容器里哪个才是我需要的对象呢?我大致的理解是这样,同时也带有很多的疑问。不知道有没有能够描述清楚。又或者我的理解本身就是错误的?如果理解本身就是错误的,希望能够详细讲解一下依赖注入与注解注入以及在web项目中注解是如何工作的?如果您有时间的话?不妨在告知一下具体的注解注入实现过程?感激不尽!

ringa_leeringa_lee2765 天前949

全部回覆(4)我來回復

  • 巴扎黑

    巴扎黑2017-04-17 17:53:29

    先看看這兩篇文章:

    註解

    依賴注入

    可以這麼說,在spring裡,有些依賴注入,是透過註解技術實現的哦!

    回覆
    0
  • PHPz

    PHPz2017-04-17 17:53:29

    忘了,註解是1.5引入的嗎?時間長了,最基本的東西忘得差不多了。
    大概說一下,說到註解,不得不提到:

    這也是註解,那此註解的作用是什麼?無非是專案上線前形成DOC文件的基本要素,它以不影響你專案程式碼的實際運作為前提。
    至於題主疑惑的註解實現細節,建議題主可以透過自訂註解、添加自訂註解的過程了解大概(更深入的就要看文檔了)。
    spring汲取了註解的優點,實現了依賴注入。 spring容器怎麼管理bean?(你前提是理解什麼是單例什麼是原型)
    是的,一定程度上依賴注入(屏蔽private關鍵字)破壞了封裝性。
    另外,註解(如 @Autowired)是注入的一種方式和實現(注入最基本的兩種方式,xml注入和註解注入)。記得,加入註解後,還要在xml設定檔中掃描註解。

    非大神,勿噴灑

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 17:53:29

    註解注入很大程度上簡化了配置文件的編寫量

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 17:53:29

    參考 http://stackoverflow.com/questions/21588684/spring-aop-annotationannotation

    註解本身只是 做了一個標記,參考 Java的@annotation,然後 你在ApplicationContext 配置掃描,然後它透過標記的註解 例如@service 之類的將其設定 值.

    回覆
    0
  • 取消回覆