Maison  >  Article  >  Java  >  Annotations communes SpringMVC

Annotations communes SpringMVC

Guanhui
Guanhuioriginal
2020-06-04 16:35:252771parcourir

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的上一层(扫描包详解见下面浅析)

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;
    }
}

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; 
}

(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;
    }
}

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";  
     }  
}

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:
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