Maison Java JavaBase Annotations communes SpringMVC

Annotations communes SpringMVC

Jun 04, 2020 pm 04:35 PM
java

Annotations communes SpringMVC

Annotations communes de SpringMVC

1 @Controller

Dans SpringMVC, le contrôleur Contrôleur responsable. pour le traitement des demandes distribuées par DispatcherServlet, il encapsule les données demandées par l'utilisateur dans un modèle après avoir été traitées par la couche de traitement métier, puis renvoie le modèle à la vue correspondante pour affichage. SpringMVC fournit un moyen très simple de définir un contrôleur. Vous n'avez pas besoin d'hériter d'une classe spécifique ou d'implémenter une interface spécifique. Il vous suffit d'utiliser @Controller pour marquer une classe en tant que contrôleur, puis d'utiliser certaines annotations telles que @. RequestMapping et @RequestParam pour le définir le mappage entre les requêtes URL et les méthodes du contrôleur, afin que le contrôleur soit accessible au monde extérieur. De plus, Controller ne dépend pas directement des objets HttpServlet tels que HttpServletRequest et HttpServletResponse. Ils peuvent être obtenus de manière flexible via les paramètres de méthode de Controller.

@Controller est utilisé pour marquer une classe, et la classe marquée avec est un objet SpringMVC Controller. Le processeur de répartition analysera la méthode de la classe annotée et détectera si la méthode est annotée avec @RequestMapping. @Controller définit simplement une classe de contrôleur et la méthode annotée avec @RequestMapping est le processeur qui gère réellement la requête. Le simple fait d'utiliser la marque @Controller sur une classe ne peut pas vraiment dire qu'il s'agit d'une classe de contrôleur de SpringMVC, car Spring ne la reconnaît pas pour le moment. Alors, comment utiliser Spring pour le reconnaître ? À l’heure actuelle, nous devons confier cette classe de contrôleur à Spring pour la gestion. Il existe deux manières :

(1) Définir l'objet bean de MyController dans le fichier de configuration SpringMVC.

(2) Dans le fichier de configuration SpringMVC, indiquez à Spring où trouver le contrôleur marqué @Controller.

<!--方式一-->
<bean class="com.host.app.web.controller.MyController"/>
<!--方式二-->
< context:component-scan base-package = "com.host.app.web" />//路径写到controller的上一层(扫描包详解见下面浅析)
Copier après la connexion

2. @RequestMapping

RequestMapping est une annotation utilisée pour gérer le mappage d'adresses de requête et peut être utilisée sur des classes ou des méthodes. Utilisé sur une classe, cela signifie que toutes les méthodes de la classe qui répondent aux requêtes utilisent cette adresse comme chemin parent.

L'annotation RequestMapping a six attributs. Ci-dessous, nous la divisons en trois catégories pour explication (il y a des exemples correspondants ci-dessous).

1. valeur, méthode ;

valeur : Spécifiez l'adresse réelle de la demande. L'adresse spécifiée peut être le mode Modèle URI (sera expliqué plus tard) ; : Spécifiez le type de méthode demandé, GET, POST, PUT, DELETE, etc. ;

2. consomme, produit

consomme : Spécifiez le type de contenu de soumission (Content-Type) pour traiter la demande. , tel que application/json , text/html;

produit : Spécifie le type de contenu à renvoyer. Il ne sera renvoyé que si le type (Accepter) dans l'en-tête de la requête contient le type spécifié ;

3. params, headers

params : Spécifiez que la requête doit contenir certaines valeurs de paramètres avant que cette méthode puisse la traiter.

en-têtes : la requête spécifiée doit contenir certaines valeurs d'en-tête spécifiées pour que cette méthode puisse traiter la requête.

3. @Resource et @Autowired

@Resource et @Autowired sont tous deux utilisés pour l'injection de bean. En fait, @Resource n'est pas une annotation de Spring. Le package est javax.annotation.Resource et doit être importé, mais Spring prend en charge l'injection de cette annotation.

1. Points communs

Les deux peuvent être écrits sur des champs et des méthodes de définition. Si les deux sont écrits dans les champs, il n'est pas nécessaire d'écrire des méthodes de définition.

2. Différences

(1) @Autowired

@Autowired est une annotation fournie par Spring et doit importer le package org.springframework.beans.factory.annotation. Autowired ; injectez uniquement en fonction de byType.

public class TestServiceImpl {
    // 下面两种@Autowired只要使用一种即可
    @Autowired
    private UserDao userDao; // 用于字段上
    
    @Autowired
    public void setUserDao(UserDao userDao) { // 用于属性的方法上
        this.userDao = userDao;
    }
}
Copier après la connexion

L'annotation @Autowired assemble les objets dépendants selon le type (byType). Par défaut, elle nécessite que l'objet dépendant existe. Si les valeurs nulles sont autorisées, son attribut obligatoire peut être défini sur false. Si nous voulons assembler par nom (byName), nous pouvons l'utiliser en conjonction avec l'annotation @Qualifier. Comme suit :

public class TestServiceImpl {
    @Autowired
    @Qualifier("userDao")
    private UserDao userDao; 
}
Copier après la connexion

(2) @Resource

@Resource est automatiquement injecté par ByName par défaut, fourni par J2EE, et nécessite d'importer le package javax.annotation.Resource. @Resource a deux attributs importants : name et type, et Spring résout l'attribut name de l'annotation @Resource en nom du bean et l'attribut type en type de bean. Par conséquent, si l'attribut name est utilisé, la stratégie d'injection automatique byName est utilisée, et lorsque l'attribut type est utilisé, la stratégie d'injection automatique byType est utilisée. Si ni l'attribut name ni l'attribut type ne sont spécifiés, la stratégie d'injection automatique byName sera utilisée via le mécanisme de réflexion.

public class TestServiceImpl {
    // 下面两种@Resource只要使用一种即可
    @Resource(name="userDao")
    private UserDao userDao; // 用于字段上
    
    @Resource(name="userDao")
    public void setUserDao(UserDao userDao) { // 用于属性的setter方法上
        this.userDao = userDao;
    }
}
Copier après la connexion

Remarque : Il est préférable de mettre @Resource sur la méthode setter, car elle est plus conforme à la pensée orientée objet et exploite les attributs via set et get au lieu d'exploiter directement les attributs.

Séquence d'assemblage de la ressource :

① Si le nom et le type sont spécifiés en même temps, le seul bean correspondant sera trouvé dans le contexte Spring pour l'assemblage. Si ce n'est pas le cas. trouvé, une exception sera levée.

② Si ​​le nom est spécifié, le bean correspondant au nom (id) sera recherché dans le contexte pour l'assemblage. S'il n'est pas trouvé, une exception sera levée.

③ Si le type est spécifié, un bean unique correspondant similaire sera trouvé à partir du contexte pour l'assemblage. Si aucun bean n'est trouvé ou si plusieurs sont trouvés, une exception sera levée.

④如果既没有指定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";  
     }  
}
Copier après la connexion

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教程



Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Racine carrée en Java Racine carrée en Java Aug 30, 2024 pm 04:26 PM

Guide de la racine carrée en Java. Nous discutons ici du fonctionnement de Square Root en Java avec un exemple et son implémentation de code respectivement.

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Numéro Armstrong en Java Numéro Armstrong en Java Aug 30, 2024 pm 04:26 PM

Guide du numéro Armstrong en Java. Nous discutons ici d'une introduction au numéro d'Armstrong en Java ainsi que d'une partie du code.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

See all articles