2011-04-18 16 views
11

Hola, Estoy utilizando la primavera 3.0 con Quartz en una clase de planificador. He creado el contexto de aplicación porresorte autocableado no funciona

private static final ClassPathXmlApplicationContext applicationContext; 
static { 
    applicationContext = new 
     ClassPathXmlApplicationContext("config/applicationContext.xml"); 
} 

El problema es que ninguno de los @Autowired granos en realidad obtener automáticamente por cable, así que tengo que establezca las dependencias manualmente como este:

<bean class="com.spr.service.RegistrationServiceImpl" id="registrationService"> 
    <property name="userService" ref="userService" /> 
</bean> 

Ejemplo de donde estoy usando @Autowired:

public class RegistrationService { 
    @AutoWired private UserService userService; 
    // setter for userService; 
} 

public class UserService{ 
    // methods 
} 

también se aseguró para habilitar la configuración de anotación en mi configuración de primavera:

<context:annotation-config/> 
<bean id="registrationSevice" class="RegistrationService"/> 
<bean id="userService" class="UserService"/> 

¿Por qué @Autowired no funciona para mí?

+0

Consejo: Es un mejor paradigma para el autoenlace a través del constructor: 'private userService userService final; @Autowired public ResgistrationService (UserService userService) {// setter} ' – hisdrewness

Respuesta

22

No ha proporcionado el código fuente de la clase UserService, por lo que no puedo estar seguro acerca de su problema. Parece que a la clase UserService le falta una anotación de "estereotipo" como @Component o @Service. También hay que configurar el escaneo ruta de clase primavera utilizando la siguiente configuración:

<?xml version="1.0" encoding="UTF-8"?> 
    <beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <!-- Add your classes base package here -->   
    <context:component-scan base-package="your.package"/> 

    </beans> 

sus granos deben incluir una de las anotaciones estereotipo primavera como:

package your.package; 

@Service 
public class UserService{ 
} 
+0

Dudo si la anotación @Service es obligatoria, de todos modos voy a probar. – prassee

+0

@prassee @Component (o sub) Se requiere anotación para crear un bean para esta clase. También puedes hacer esto con XML, pero creo que esto no es lo que quieres, ¿o no? – Ralph

+0

@Ralph sí. Trabajé en spring mvc 3.0 en el que applicationContext.xml tiene el y los controladores están anotados con @controllers, los objetos dependientes están anotados con @Autowired Service service. Así que esperaba lo mismo aquí. Lo intentaré con @Service para mis clases de servicio – prassee

8

Atlast lo tengo resuelta por la adición de la

<context:component-scan base-package="your.package"/> 

en mi applicationContext.xml. Gracias a todos por su apoyo.