Use anotaciones para construir contenedores de COI
Use anotaciones para registrar frijoles con contenedores de resorte. Necesita registrarse en ApplicationContext.xml <Context: Component-scan Base-Package = ”Pagkage1 [, Pagkage2, ..., Pagkagen]”/>.
Por ejemplo: especifique un paquete en el paquete base
<context: componente-scan base-paquete = "cn.gacl.java"/>
Indica que si una clase tiene una anotación específica [@componente/@repository/@servicio/@controlador] en el paquete cn.gacl.java y su subpackage, este objeto se registrará en el contenedor de primavera como un bean. También puede especificar múltiples paquetes en <context: component-scan base-paquete = ""/>, como:
<context: componente-scan base-paquete = "cn.gacl.dao.impl, cn.gacl.service.impl, cn.gacl.action"/>
Múltiples paquetes están separados por comas.
1. @Component
@Componente
Es una forma común para todos los componentes administrados por la primavera. La anotación @Component se puede colocar en la cabeza de la clase, y no se recomienda @Component.
2. @Controller
@Controller corresponde al frijol de la capa de presentación, es decir, acción, por ejemplo:
@Controller @Scope ("Prototype") Public ClassationAction Extiens Baseaction <Serem> {...}Después de usar la anotación de @Controller para identificar la acción del usuario, significa que la acción de usuario se debe entregar al contenedor de primavera para la administración. Habrá una acción llamada "Useraction" en el contenedor de primavera. Este nombre se toma en función del nombre de la clase de usuario de usuario. Nota: Si @Controller no especifica su valor 【@Controller】, el nombre predeterminado del frijol es minúscula en la primera letra del nombre de clase. Si especifica el valor 【@Controller (value = "useraction")】 o 【@Controller ("userAction")】, entonces use el valor como el nombre del bean.
La Acción de usuario aquí también usa la anotación @Scope. @Scope ("prototipo") significa que el alcance de la acción se declara como un prototipo. Puede usar el alcance = "prototipo" del contenedor para garantizar que cada solicitud tenga una acción separada para manejarlo, evitando los problemas de acción de seguridad del hilo en los puntales. Spring El alcance predeterminado es Singleton Mode (Scope = "Singleton"), que solo creará un objeto de acción. Cada acceso es el mismo objeto de acción. Los datos no son seguros. Struts2 requiere que cada acceso corresponda a una acción diferente. Scope = "Prototype" puede garantizar que se cree un objeto de acción cuando hay una solicitud.
3. @ Servicio
@Service corresponde al bean de capa de servicio, por ejemplo:
@Service ("UserService") Public Class UserServiceImpl implementa UserService {……}La anotación @Service ("UserService") le dice a Spring que cuando Spring quiere crear una instancia de UserServiceImpl, el nombre del frijol debe llamarse "UserService". De esta manera, cuando la acción necesita usar una instancia de UserServiceImpl, el "servicio de usuarios" creado por Spring puede inyectarse en acción: en acción, solo necesita declarar una variable llamada "UserService" para recibir el "servicio de usuarios" inyectado por Spring. El código específico es el siguiente:
// Inyect UserService @Resource (name = "UserService") Private UserService UserService;
Nota: El tipo de la variable "UserService" declarada en la acción debe ser "UserServiceImpl" o su clase principal "UserService", de lo contrario no se puede inyectar debido a tipos inconsistentes. Debido a que la variable "UserService" declarada en la acción usa la anotación @Resource e indica su nombre = "UserService", que es equivalente a decirle a Spring que quiero instanciar un "servicio de usuarios". La primavera me ayudará a instanciarlo rápidamente, y luego dármelo. Cuando Spring ve la anotación @Resource en la variable de servicio de usuarios, de acuerdo con el atributo de nombre especificado, puede saber que una instancia de UserServiceImpl debe usarse en la acción. En este momento, Spring inyectará la instancia de UserServiceImpl llamada "UserService" en la variable "UserService" en la acción para ayudar a la acción a completar la instanciación de UserService, por lo que en la acción no es necesario usar "UserService UserService = New UserServiceImpl ()"; ";" Esta es la forma más primitiva de instanciar el servicio de usuarios.
Si no hay resorte, cuando la acción necesita usar UserServiceImpl, debe crear activamente un objeto de instancia a través de "UserService UserService = New UserServiceImpl ();". Sin embargo, después de usar Spring, cuando Action quiere usar UserServiceImpl, no tiene que crear activamente una instancia de UserServiceImpl. Se ha entregado una instancia de UserServiceImpl se ha entregado a Spring. Spring ofrece la instancia de UserServiceImpl creada a la acción, y puede usarla directamente después de obtener la acción.
La acción se puede usar inmediatamente después de crear activamente la instancia de UserServiceImpl, pero se hace pasar por pasivamente la primavera para crear la instancia de UserServiceImpl antes de inyectarla en acción.
Esto muestra que el "control" de Action sobre la clase "UserServiceImpl" ha sido "invertido". Resulta que la iniciativa está en mis propias manos. Tengo que usar la instancia de clase "UserServiceImpl". Puedo tomar la iniciativa de usarla de inmediato. Pero ahora no puedo llevar la iniciativa a nuevas instancias de la instancia de clase "UserServiceImpl". Spring ha eliminado el poder de la nueva instancia de clase "UserServiceImpl". Solo Spring puede nuevas instancias de la instancia de clase "UserServiceImpl", y la acción solo puede esperar a que Spring cree la clase "UserSe" después de la instancia de la clase RVICEMPL ", por favor" por favor "Spring Déle la instancia creada de la clase" UserServiceImpl "para que pueda usar" UserServicePl ". Esta es la idea central de la primavera" Inversión de control ", también llamada" Inyección de dependencia "." Inyección de dependencia "." La inyección de la inyección de dependencia "también es fácil. UserServiceImpl para funcionar, por lo que crea una dependencia de UserServiceMpl.
4. @ Repository
@Repository corresponde al bean de la capa de acceso de datos, por ejemplo:
@Repository (value = "userdao") Public Class UserDaoImpl extiende a BasedAoMPL <Usater> {………}La anotación @Repository (value = "userdao") le dice a Spring que permita que Spring cree una instancia de UserDaoImpl llamada "UserDao".
Cuando el Servicio necesita usar la instancia de UserDaoImpl llamada "UserDao" creada por Spring, puede usar la anotación @Resource (name = "userdao") para decirle a Spring, y Spring puede inyectar el usuario creado en el servicio.
// inyectar userdao, y al sacar al usuario especificado de la base de datos de acuerdo con la identificación del usuario, debe usar @Resource (name = "userdao") privado a base de base <serem> userdao;
@Resource, @aUtowired y @Qualifier se usan para inyectar objetos. Entre ellos, @Resource se puede inyectar en nombre o tipo, @aUtowired solo se puede inyectar en el tipo, y @Qualifier solo se puede inyectar en el nombre.
Pero tienen algunas diferencias sutiles:
1. @Resource y @Qualifier son inyectados automáticamente por ByName de forma predeterminada, y @Autowired es inyectado automáticamente por Bytype de forma predeterminada.
2. @Resource tiene dos propiedades que son más importantes, nombre y tipo. Si se utiliza el atributo de nombre, se usa la política de inyección automática de Byname. Cuando se usa el atributo de tipo, se utiliza la política de inyección automática de alumnos.
3. @Resources es una anotación proporcionada por JDK, mientras que @Autowired es una anotación proporcionada por Spring.
Puedes tratar a @Resource como el jefe de @Autowired @Qualifier, jaja. Tengo lo que tienes, y tengo lo que no tienes, y yo también lo tengo ~
@Resource, @aUtowired y @Qualifier se usan para inyectar objetos. Entre ellos, @Resource se puede inyectar en nombre o tipo, @aUtowired solo se puede inyectar en el tipo, y @Qualifier solo se puede inyectar en el nombre.
Pero tienen algunas diferencias sutiles:
1. @Resource y @Qualifier son inyectados automáticamente por ByName de forma predeterminada, y @Autowired es inyectado automáticamente por Bytype de forma predeterminada.
2. @Resource tiene dos propiedades que son más importantes, nombre y tipo. Si se utiliza el atributo de nombre, se usa la política de inyección automática de Byname. Cuando se usa el atributo de tipo, se utiliza la política de inyección automática de alumnos.
3. @Resources es una anotación proporcionada por JDK, mientras que @Autowired es una anotación proporcionada por Spring.
Puedes tratar a @Resource como el jefe de @Autowired @Qualifier, jaja. Tengo lo que tienes, y tengo lo que no tienes, y yo también lo tengo ~
Las anotaciones de primavera comunes anteriores El método de usar anotaciones para construir contenedores del COI es todo el contenido que he compartido con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.