cari

Rumah  >  Soal Jawab  >  teks badan

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_lee2817 hari yang lalu990

membalas semua(4)saya akan balas

  • 巴扎黑

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

    Lihat dua artikel ini dahulu:

    Anotasi

    Suntikan Kebergantungan

    Boleh dikatakan bahawa dalam spring, beberapa suntikan pergantungan dicapai melalui teknologi anotasi!

    balas
    0
  • PHPz

    PHPz2017-04-17 17:53:29

    Terlupa, adakah anotasi diperkenalkan dalam 1.5? Masa berlalu, saya hampir terlupa perkara yang paling asas.
    Untuk memberi anda idea kasar, apabila ia berkaitan dengan anotasi, saya perlu menyebut:

    Ini juga merupakan anotasi, jadi apakah fungsi anotasi ini? Ia tidak lebih daripada elemen asas untuk membentuk dokumen DOC sebelum projek disiarkan dalam talian Ia berdasarkan premis bahawa ia tidak menjejaskan operasi sebenar kod projek anda.
    Bagi butiran pelaksanaan anotasi yang dikelirukan oleh penyoal, adalah disyorkan bahawa penyoal boleh mendapatkan gambaran keseluruhan melalui proses menyesuaikan anotasi dan menambah anotasi tersuai (lihat dokumentasi untuk maklumat yang lebih mendalam).
    Spring mengambil kesempatan daripada anotasi dan melaksanakan suntikan pergantungan. Bagaimanakah bekas spring menguruskan kacang? (Anda mesti faham apa itu singleton dan apa itu prototaip)
    Ya, suntikan pergantungan (melindungi kata kunci peribadi) memusnahkan pengkapsulan pada tahap tertentu.
    Selain itu, anotasi (seperti @Autowired) ialah cara dan pelaksanaan suntikan (dua cara suntikan paling asas, suntikan xml dan suntikan anotasi). Ingat, selepas menambah anotasi, anda juga mesti mengimbas fail konfigurasi xml untuk anotasi.

    Jika anda bukan orang yang hebat, sila jangan sembur

    balas
    0
  • 怪我咯

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

    Suntikan anotasi sangat memudahkan penulisan fail konfigurasi

    balas
    0
  • 怪我咯

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

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

    Anotasi itu sendiri hanyalah tanda, rujuk @anotasi Java, dan kemudian anda mengkonfigurasi imbasan dalam ApplicationContext, dan kemudian ia menetapkan nilai melalui anotasi yang ditanda, seperti @service.

    balas
    0
  • Batalbalas