Utilisez des annotations pour construire des conteneurs IOC
Utilisez des annotations pour enregistrer les haricots avec des conteneurs à ressort. Besoin de s'inscrire dans ApplicationContext.xml <Context: Component-Scan Base-Package = ”Pagkage1 [, Pagkage2,…, Pagkagen]” />.
Par exemple: spécifiez un package dans le pack de base
<Context: Component-Scan Base-Package = "Cn.gacl.java" />
Indique que si une classe a une annotation spécifique [@ composant / @ repository / @ service / @ contrôleur] dans le package cn.gacl.java et son sous-package, cet objet sera enregistré dans le conteneur de ressort sous forme de bean. Vous pouvez également spécifier plusieurs packages dans <Context: Component-Scan Base-Package = "" />, tels que:
<Context: Component-Scan Base-Package = "Cn.gacl.dao.impl, cn.gacl.service.impl, cn.gacl.action" />
Plusieurs packages sont séparés par des virgules.
1. @Component
@Composant
C'est une forme courante pour tous les composants gérés par le printemps. L'annotation @component peut être placée sur la tête de la classe et @Component n'est pas recommandé.
2. @Controller
@Controller correspond au haricot de la couche de présentation, c'est-à-dire l'action, par exemple:
@Controller @Scope ("Prototype") Classe publique UserAction étend Baseaction <User> {...}Après avoir utilisé @Controller Annotation pour identifier l'utilisateur, cela signifie que l'utilisateur doit être remis au conteneur de ressort pour la gestion. Il y aura une action nommée "UserAction" dans le conteneur à ressort. Ce nom est pris en fonction du nom de la classe UserAction. Remarque: Si @Controller ne spécifie pas sa valeur 【@Controller】, le nom de bean par défaut est en minuscules dans la première lettre du nom de la classe. Si vous spécifiez la valeur 【@Controller (valeur = "userAction")】 ou 【@Controller ("userAction")】, utilisez la valeur comme nom du bean.
L'utilisateur ici utilise également l'annotation @scope. @Scope ("Prototype") signifie que la portée de l'action est déclarée comme prototype. Vous pouvez utiliser le scope = "Prototype" du conteneur pour vous assurer que chaque demande a une action distincte pour le gérer, en évitant les problèmes de sécurité du fil d'action dans les entretoises. Spring La portée par défaut est le mode Singleton (scope = "singleton"), qui ne créera qu'un objet d'action. Chaque accès est le même objet d'action. Les données ne sont pas sûres. Struts2 nécessite que chaque accès correspond à une action différente. scope = "Prototype" peut s'assurer qu'un objet d'action est créé lorsqu'il y a une demande.
3. @ Service
@Service correspond au bean de la couche de service, par exemple:
@Service ("UserService") Classe publique UserServiceImpl implémente UserService {……}L'annotation @Service ("UserService") indique à Spring que lorsque Spring souhaite créer une instance de UserServiceIMPL, le nom de bean doit être appelé "UserService". De cette manière, lorsque l'action doit utiliser une instance de UserServiceImpll, le "UserService" créé par Spring peut être injecté en action: en action, il vous suffit de déclarer une variable nommée "UserService" pour recevoir le "service d'utilisateur" injecté par Spring. Le code spécifique est le suivant:
// Injecte UserService @Resource (name = "UserService") Private UserService UserService;
Remarque: Le type de variable "UserService" déclarée dans l'action doit être "UserServiceImpl" ou sa classe parent "UserService", sinon il ne peut pas être injecté en raison de types incohérents. Parce que la variable "UserService" déclarée dans l'action utilise l'annotation @Resource et indique son nom = "userService", ce qui équivaut à dire à Spring que je veux instancier un "service d'utilisateur". Spring m'aidera à l'instanter rapidement, puis me le donnera. Lorsque Spring voit l'annotation @Resource sur la variable UserService, selon l'attribut de nom spécifié, vous pouvez savoir qu'une instance de UserServiceImpl doit être utilisée dans l'action. À l'heure actuelle, Spring injectera l'instance de UserServiceIMPL appelé "UserService" dans la variable "UserService" dans l'action pour aider l'action à terminer l'instanciation de la recherche d'utilisateur, donc dans l'action, il n'est pas nécessaire d'utiliser "UserService UserService = new UserServiceIMPL ();" C'est le moyen le plus primitif d'instancier le service d'utilisateur.
S'il n'y a pas de ressort, lorsque l'action doit utiliser UserserServiceIMPL, vous devez créer activement un objet d'instance via "UserService UseserService = new UserServiceImpl ();". Cependant, après avoir utilisé Spring, lorsque l'action souhaite utiliser UserServiceIMPL, vous n'avez pas à créer activement une instance de UserServiceIMPL. La création d'une instance UserServiceIMPL a été remise à Spring. Spring donne à l'instance UserServiceIMPL créée à l'action, et vous pouvez l'utiliser directement après avoir obtenu l'action.
L'action peut être utilisée immédiatement après la création active de l'instance UserServiceIMPL, mais devient passivement d'attendre Spring pour créer l'instance UserServiceIMPL avant de l'injecter en action.
Cela montre que le "contrôle" de l'action sur la classe "userServiceImpl" a été "inversé". Il s'avère que l'initiative est entre mes mains. Je dois utiliser l'instance de classe "UserServiceImpl". Je peux prendre l'initiative de l'utiliser immédiatement. Mais maintenant, je ne peux pas prendre l'initiative pour de nouvelles instances de l'instance de classe "UserServiceImpl". La puissance de la nouvelle instance de classe "UserServiceImpl" a été enlevée par le printemps. SEULEMENT Spring peut ne peut pas attendre que Spring ", veuillez lui donner l'instance créée de la classe" Contrôle ", s'il vous plaît, ne peut pas utiliser" Spricempl " UserServiceIMPL pour fonctionner, il crée donc une dépendance à la recherche d'utilisateurs de la Nérarchie.
4. @ référentiel
@Repository correspond au bean de couche d'accès aux données, par exemple:
@Repository (value = "userdao") Classe publique UserDaoimpl étend BasedaOIMPL <User> {………}L'annotation @Repository (value = "userdao") indique à Spring de laisser Spring créer une instance userdaoimpl nommée "UserDao".
Lorsque le service doit utiliser l'instance userdaoimpl nommée "UserDao" créée par Spring, vous pouvez utiliser l'annotation @Resource (name = "userdao") pour dire que Spring, et Spring peut injecter le userdao créé dans le service.
// Injecte UserDAO, et lorsque vous retirez l'utilisateur spécifié de la base de données en fonction de l'ID utilisateur, vous devez utiliser @Resource (name = "userdao") Private Basedao <User> userDao;
@Resource, @Autowired et @qualifier sont tous utilisés pour injecter des objets. Parmi eux, @Resource peut être injecté dans le nom ou le type, @Autowired ne peut être injecté que dans le type, et @qualifier ne peut être injecté que dans le nom.
Mais ils ont des différences subtiles:
1. @Resource et @qualifier sont automatiquement injectés par ByName par défaut, et @Autowired est automatiquement injecté par ByType par défaut.
2. @Resource a deux propriétés plus importantes, le nom et le type. Si l'attribut de nom est utilisé, la politique d'injection automatique de BYNAM est utilisée. Lorsque vous utilisez l'attribut type, la politique d'injection automatique ByType est utilisée.
3. @Resources est une annotation fournie par JDK, tandis que @Autowired est une annotation fournie par le printemps.
Vous pouvez traiter @Resource comme le patron de @Autowired @qualifier, haha. J'ai ce que tu as, et j'ai ce que tu n'as pas, et j'ai trop
@Resource, @Autowired et @qualifier sont tous utilisés pour injecter des objets. Parmi eux, @Resource peut être injecté dans le nom ou le type, @Autowired ne peut être injecté que dans le type, et @qualifier ne peut être injecté que dans le nom.
Mais ils ont des différences subtiles:
1. @Resource et @qualifier sont automatiquement injectés par ByName par défaut, et @Autowired est automatiquement injecté par ByType par défaut.
2. @Resource a deux propriétés plus importantes, le nom et le type. Si l'attribut de nom est utilisé, la politique d'injection automatique de BYNAM est utilisée. Lorsque vous utilisez l'attribut type, la politique d'injection automatique ByType est utilisée.
3. @Resources est une annotation fournie par JDK, tandis que @Autowired est une annotation fournie par le printemps.
Vous pouvez traiter @Resource comme le patron de @Autowired @qualifier, haha. J'ai ce que tu as, et j'ai ce que tu n'as pas, et j'ai trop
Les annotations de printemps communes ci-dessus La méthode d'utilisation d'annotations pour construire des conteneurs IOC est tout le contenu que j'ai partagé avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.