最近开始试着做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项目中注解是如何工作的?如果您有时间的话?不妨在告知一下具体的注解注入实现过程?感激不尽!
まず次の 2 つの記事をご覧ください:
注釈
依存関係の注入
spring
では、一部の依存性注入がアノテーション テクノロジーによって実現されていると言えます。忘れていましたが、アノテーションは 1.5 で導入されましたか?時間が経つにつれて、私は最も基本的なことをほとんど忘れてしまいました。
大まかなアイデアを説明すると、アノテーションに関しては次の点に言及する必要があります。
これも注釈ですが、この注釈の機能は何ですか?これは、プロジェクトをオンラインにする前に DOC ドキュメントを作成するための基本的な要素にすぎません。プロジェクト コードの実際の動作には影響を与えないという前提に基づいています。
質問者が混乱しているアノテーション実装の詳細については、質問者がアノテーションをカスタマイズし、カスタム アノテーションを追加するプロセスを通じて概要を把握できるようにすることをお勧めします (詳細についてはドキュメントを参照してください)。
Spring はアノテーションを利用し、依存関係の注入を実装します。 Spring コンテナはどのように Bean を管理するのでしょうか? (シングルトンとは何か、プロトタイプとは何かを理解する必要があります)
はい、依存関係の注入 (プライベート キーワードのシールド) はカプセル化をある程度破壊します。
さらに、アノテーション (@Autowired など) は、インジェクション (XML インジェクションとアノテーション インジェクションの 2 つの最も基本的なインジェクション方法) の方法および実装です。注釈を追加した後は、XML 構成ファイルの注釈もスキャンする必要があることに注意してください。
苦手な方はスプレーしないでください
アノテーションの挿入により、構成ファイルの作成が大幅に簡素化されます
参考 http://stackoverflow.com/questions/21588684/spring-aop-annotationannotation
アノテーション自体は単なるマークです。Java の @annotation を参照して、ApplicationContext でスキャンを設定し、@service などのマークされたアノテーションを通じて値を設定します。