ホームページ Java &#&ベース SpringMVC の共通アノテーション

SpringMVC の共通アノテーション

Jun 04, 2020 pm 04:35 PM
java

SpringMVC の共通アノテーション

SpringMVC の共通アノテーション

1, @Controller

SpringMVC では、コントローラー Controller Responsible DispatcherServlet によって分散されたリクエストを処理する場合、ビジネス処理層によって処理された後、ユーザーによってリクエストされたデータがモデルにカプセル化され、そのモデルが表示のために対応するビューに返されます。 SpringMVC は、コントローラーを定義するための非常に簡単な方法を提供します。特定のクラスを継承したり、特定のインターフェイスを実装したりする必要はありません。@Controller を使用してクラスをコントローラーとしてマークし、@ などのいくつかのアノテーションを使用するだけです。 RequestMapping と @RequestParam を使用して定義し、外部からコントローラーにアクセスできるようにする、URL リクエストとコントローラー メソッド間のマッピング。また、ControllerはHttpServletRequestやHttpServletResponseなどのHttpServletオブジェクトに直接依存せず、Controllerのメソッドパラメータを通じて柔軟に取得することができます。

@Controller はクラスをマークするために使用され、これでマークされたクラスは SpringMVC コントローラー オブジェクトです。ディスパッチ プロセッサは、アノテーションが付けられたクラスのメソッドをスキャンし、メソッドに @RequestMapping アノテーションが付けられているかどうかを検出します。 @Controller はコントローラー クラスを定義するだけで、@RequestMapping アノテーションが付けられたメソッドが実際にリクエストを処理するプロセッサーとなります。クラス上で @Controller マークを使用するだけでは、そのクラスが SpringMVC のコントローラー クラスであるとは言えません。これは、現時点では Spring がそれを認識していないためです。では、Spring を使用してそれを認識するにはどうすればよいでしょうか?この時点で、このコントローラー クラスを Spring に渡して管理する必要があります。方法は2通りあります。

(1) SpringMVC設定ファイルにMyControllerのBeanオブジェクトを定義します。

(2) SpringMVC 設定ファイルで、@Controller とマークされたコントローラーの場所を Spring に指示します。

<!--方式一-->
<bean class="com.host.app.web.controller.MyController"/>
<!--方式二-->
< context:component-scan base-package = "com.host.app.web" />//路径写到controller的上一层(扫描包详解见下面浅析)
ログイン後にコピー

2. @RequestMapping

RequestMapping は、リクエスト アドレス マッピングを処理するために使用されるアノテーションであり、クラスまたはメソッドで使用できます。クラスで使用すると、リクエストに応答するクラス内のすべてのメソッドがこのアドレスを親パスとして使用することを意味します。

RequestMapping アノテーションには 6 つの属性がありますが、以下では 3 つのカテゴリに分けて説明します (対応する例は以下にあります)。

1. 値、メソッド;

値: リクエストの実際のアドレスを指定します。指定されたアドレスは URI テンプレート モード (後で説明します);

メソッドも可能です: リクエストされたメソッド タイプ (GET、POST、PUT、DELETE など) を指定します;

2、consums、production

consumes: リクエストを処理するための送信コンテンツ タイプ (Content-Type) を指定しますapplication/json 、 text/html など;

生産: 返されるコンテンツ タイプを指定すると、リクエスト ヘッダーの (Accept) タイプに指定されたタイプが含まれる場合にのみ返されます。

#3, params, headers

params: 指定されたリクエストは、このメソッドで処理される前に、特定のパラメータ値が含まれている必要があります。

headers: このメソッドがリクエストを処理するには、指定されたリクエストに特定の指定されたヘッダー値が含まれている必要があります。

3, @Resource と @Autowired

@Resource と @Autowired は Bean インジェクションに使用されますが、実際には @Resource は Spring のアノテーションではありません。は javax.annotation.Resource であり、インポートする必要がありますが、Spring はこのアノテーションの注入をサポートしています。

1. 共通点

どちらもフィールドとセッターメソッドに記述できます。両方がフィールドに記述されている場合は、セッター メソッドを記述する必要はありません。

2. 違い

(1)@Autowired

@Autowired は Spring によって提供されるアノテーションであり、org.springframework.beans.factory.annotation パッケージをインポートする必要があります。 Autowired; byType に従ってのみ挿入します。

public class TestServiceImpl {
    // 下面两种@Autowired只要使用一种即可
    @Autowired
    private UserDao userDao; // 用于字段上
    
    @Autowired
    public void setUserDao(UserDao userDao) { // 用于属性的方法上
        this.userDao = userDao;
    }
}
ログイン後にコピー

@Autowired アノテーションは、タイプ (byType) に従って依存オブジェクトをアセンブルします。デフォルトでは、依存オブジェクトが存在する必要があります。null 値が許可される場合は、その required 属性を false に設定できます。名前 (byName) でアセンブルしたい場合は、 @Qualifier アノテーションと組み合わせて使用​​できます。次のように:

public class TestServiceImpl {
    @Autowired
    @Qualifier("userDao")
    private UserDao userDao; 
}
ログイン後にコピー

(2) @Resource

@Resource は、J2EE によって提供される ByName によってデフォルトで自動的に挿入され、パッケージ javax.annotation.Resource をインポートする必要があります。 @Resource には、name と type という 2 つの重要な属性があり、Spring は @Resource アノテーションの name 属性を Bean の名前に解決し、type 属性は Bean のタイプに解決します。したがって、name 属性が使用される場合は byName 自動挿入戦略が使用され、type 属性が使用される場合は byType 自動挿入戦略が使用されます。 name 属性も type 属性も指定されていない場合は、リフレクション メカニズムを通じて byName 自動挿入戦略が使用されます。

public class TestServiceImpl {
    // 下面两种@Resource只要使用一种即可
    @Resource(name="userDao")
    private UserDao userDao; // 用于字段上
    
    @Resource(name="userDao")
    public void setUserDao(UserDao userDao) { // 用于属性的setter方法上
        this.userDao = userDao;
    }
}
ログイン後にコピー

注: @Resource を setter メソッドに置くのが最善です。これは、オブジェクト指向の考え方に沿っており、プロパティを直接操作するのではなく、set および get を通じてプロパティを操作するためです。

@リソース アセンブリ シーケンス:

① 名前と型を同時に指定した場合、アセンブリの Spring コンテキストから一致する Bean のみが検索されます。見つかった場合は例外がスローされます。

② name を指定すると、アセンブリのコンテキストから名前 (id) に一致する Bean が検索され、Bean が見つからない場合は例外がスローされます。

③type を指定すると、アセンブリのコンテキストから類似した一致する一意の Bean が検索されますが、Bean が見つからない場合、または複数の Bean が見つかった場合は例外がスローされます。

④如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。

@Resource的作用相当于@Autowired,只不过@Autowired按照byType自动注入。

4、@ModelAttribute和 @SessionAttributes

代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。

@SessionAttributes即将值放到session作用域中,写在class上面。

具体示例参见下面:使用 @ModelAttribute 和 @SessionAttributes 传递和保存数据

5、@PathVariable

用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。如:

@Controller  
public class TestController {  
     @RequestMapping(value="/user/{userId}/roles/{roleId}",method = RequestMethod.GET)  
     public String getLogin(@PathVariable("userId") String userId,  
         @PathVariable("roleId") String roleId){  
         System.out.println("User Id : " + userId);  
         System.out.println("Role Id : " + roleId);  
         return "hello";  
     }  
     @RequestMapping(value="/product/{productId}",method = RequestMethod.GET)  
     public String getProduct(@PathVariable("productId") String productId){  
           System.out.println("Product Id : " + productId);  
           return "hello";  
     }  
     @RequestMapping(value="/javabeat/{regexp1:[a-z-]+}",  
           method = RequestMethod.GET)  
     public String getRegExp(@PathVariable("regexp1") String regexp1){  
           System.out.println("URI Part 1 : " + regexp1);  
           return "hello";  
     }  
}
ログイン後にコピー

6、@requestParam

@requestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter("name"),它有三个常用参数:defaultValue = "0", required = false, value = "isApp";defaultValue 表示设置默认值,required 铜过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型。

7、@ResponseBody

作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

8、@Component

相当于通用的注解,当不知道一些类归到哪个层时使用,但是不建议。

9、@Repository

用于注解dao层,在daoImpl类上面注解。

 推荐教程:《Java教程



以上がSpringMVC の共通アノテーションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの平方根 Javaの平方根 Aug 30, 2024 pm 04:26 PM

Java の平方根のガイド。ここでは、Java で平方根がどのように機能するかを、例とそのコード実装をそれぞれ示して説明します。

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

Javaのアームストロング数 Javaのアームストロング数 Aug 30, 2024 pm 04:26 PM

Java のアームストロング番号に関するガイド。ここでは、Java でのアームストロング数の概要とコードの一部について説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

See all articles