Prefacio
Javaconfig resultó ser un subproyecto de primavera. Proporciona información de definición de frijoles a través de clases de Java. En la versión Spring4, Javaconfig se ha convertido oficialmente en la función central de Spring4.
Este artículo presentará en detalle el contenido relevante sobre la configuración basado en las clases de Java en Spring. No diré mucho a continuación. Echemos un vistazo a la introducción detallada juntos.
1 definición de frijol
POJO ordinario puede proporcionar información de definición de frijoles para contenedores de resorte siempre que se marce la anotación @Configuration.
@ConfigurationPublic Class SystemConfig { / ** * Defina el bean e instanciar * * @return * / @Bean public userDao userDao () {return new UserDao (); } @Bean Public Deptdao DeptDao () {return new DeptDao (); } / ** * Defina el servicio UserService e inyecte el usuario de userdao y DePTDAO * * * @return * / @Bean Public UserService UserService () {UserService Service = new UserService (); Service.SetUserDAO (userDao ()); servicio.setDeptDao (Deptdao ()); servicio de regreso; }}El método de esta clase está anotado por la anotación @Bean, es decir, para definir el bean. El tipo de bean está determinado por el tipo de valor de retorno del método. El nombre es predeterminado al nombre del método y el nombre del método. También puede especificar el nombre del frijol ingresando el parámetro, como @Bean (name = "xxx"). El cuerpo del método marcado por @Bean proporciona la lógica para instanciar el bean.
La configuración anterior es equivalente a la siguiente XML:
<bean id = "userdao"/> <bean id = "deptdao"/> <bean id = "userservice" P: userdao-ref = "userdao" P: deTdao-ref = "deTdao"/>>
En comparación con el método de configuración basado en las clases de Java, que se basa en XML o método de configuración basado en anotaciones -
Debido a que la clase de anotación @Configuration en sí tiene @Component, estas clases se pueden inyectar en otros frijoles como los frijoles ordinarios.
@ConfigurationPublic Class ApplicationConfig {@AUTOWIRED SystemConfig SystemConfig; @Bean Public AuthorityService AuthorityService () {AuthorityService Service = New AuthorityService (); Service.SetUserDAO (SystemConfig.userDao ()); servicio.setDeptDao (SystemConfig.DeptDao ()); servicio de regreso; }}Spring utiliza la mejora de AOP para todos los métodos marcados @Bean en la clase de configuración, introduciendo la lógica de gestión del ciclo de vida del bean. Por ejemplo, SystemConfig.userdao () arriba, devuelve un singleton correspondiente al bean.
En @Bean, también podemos controlar el alcance del frijol anotando la anotación @scope:
@Scope ("Prototype")@Beanpublic Deptdao Deptdao () {return New DeptDao ();}De esta manera, cada llamada al método Deptdao () devolverá una nueva instancia:
afirmarnotsame (autoryservice.getDeptDao (). HashCode (), AuthorityService.getDeptDao (). HashCode ());
Nota: Use clases basadas en Java para la configuración, las bibliotecas Spring AOP y CGLIB deben incluirse en el ClassPath.
2 Comience el contenedor de primavera
2.1 Use solo la clase de @Configuration
Puede usar el constructor de la clase AnnotationConfigApplicationContext para pasar en la clase Java marcada @Configuration para iniciar el contenedor de primavera.
ApplicationContext context = new AnnotationConfigApplicationContext (SystemConfig.Class); UserService UserService = (UserService) context.getBean ("UserService"); AfirmeNnotNull (UserService);Si hay múltiples clases de configuración de @Configuration, puede registrarlas en AnnotationConfigApplicationContext y luego aplicar estas clases de configuración actualizando el contenedor:
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext (); // Registre múltiples clases de configuración context.Register (SystemConfig.Class); context.register (ApplicationConfig.Class); // Refresh the Container (Aplicar estas clases de configuración) Context.Refresh (); AplicationConfig config = context.getBean (ApplicationConfig.Class); ASSERTNOTNULL (config);
También puede ensamblar múltiples clases de configuración en una clase de configuración a través de @import, y luego simplemente registre la clase de configuración ensamblada para iniciar el contenedor:
@Configuration @import (SystemConfig.Class) Public Class ApplicationConfig2 {@aUtowired private SystemConfig SystemConfig; @Bean Public AuthorityService AuthorityService () {AuthorityService Service = New AuthorityService (); Service.SetUserDAO (SystemConfig.userDao ()); servicio.setDeptDao (SystemConfig.DeptDao ()); servicio de regreso; }}Pruebas unitarias:
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext (applicationConfig2.Class); ApplicationConfig2 config = context.getBean (ApplicationConfig2.Class); AfirmeNTNull (config); Authority FinalService AuthoryService = config.authorityService (); afirmarnotnull (autoryservice.getDeptDao ()); afirmarnotsame (autoryservice.getDeptDao (). Hashcode (), autoreralservice .getDeptdaoo (). Hashcode ());
2.2 Uso de archivos XML para consultar la configuración de la clase @Configuration
La clase de configuración marcada @Configuration también es un frijol, por lo que también puede ser escaneada por el <contexto: componente-escan de Spring>. Por lo tanto, si desea ensamblar la clase de configuración en el archivo de configuración XML e iniciar el resorte a través del archivo de configuración XML, solo necesita escanear la clase de configuración correspondiente a través de <Context: Component-scan> en XML.
<context: componente-escan-scan-package = "net.deniro.spring4.conf" recurse-pattern = "applicationConfig2.class" />
2.3 Configuración de archivos XML de referencia en la clase de @Configuration
En la clase de configuración de @Configuration, puede introducir directamente archivos de configuración XML a través de @ImporTresource, para que pueda consultar directamente los frijoles definidos en el archivo de configuración XML a través de @aUtowired.
Archivo de configuración:
<bean id = "groupdao"/> <bean id = "roledao"/>
@Configuration Clase:
@ImporTresource ("Classpath: Beans5-11.xml") @ConfigurationPublic Class ServiceConfig {@Bean @AUTOWired Public RelationService Relationservice (Groupdao GroupDao, Roledao Roledao) {Servicio de servicio de relacionales = new RelationService (); Service.SetGroupdao (Groupdao); servicio.setroledao (Roledao); servicio de regreso; }}Pruebas unitarias:
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext (ServiceConFig.Class); ServiceConfig config = context.getBean (ServiceConFig.Class); AfirmeNnotNull (config); RelationService Service = config.RelationService ((GroupDaO) context.getBean ("GroupDaO"), ((), ((), ((RELATA), ("), ("), (("), ("), ("), ("), ((), ((), ("), ("), (("), ("), (() "), (()"), ((), ("), ("), ((), ("), ("), ("), ("), ("), ((), (()"), ("), ("). .getBean ("roledao")); afirmoNotnull (servicio.getRoledao ());Mientras esta información de definición de diferentes formas de frijoles se pueda cargar en contenedores de resorte, Spring puede completar de manera inteligente el ensamblaje entre los frijoles.
Resumir
Lo anterior es todo el contenido de este artículo. Espero que el contenido de este artículo tenga cierto valor de referencia para el estudio o el trabajo de todos. Si tiene alguna pregunta, puede dejar un mensaje para comunicarse. Gracias por su apoyo a Wulin.com.