Tengo un administrador de repositorio que administra mis repositorios. Tengo @Autowired para crear instancias de mis propiedades, pero siempre son nulas. Los beans están configurados correctamente en mi xml. ¿Alguna razón por qué?Singleton y @Autowired return NULL
public class RepositoryManager {
private static RepositoryManager instance;
private RepositoryManager()
{
}
public static RepositoryManager Instance()
{
if(instance == null)
instance = new RepositoryManager();
return instance;
}
@Autowired
private IUserRepository userRepository;
@Autowired
private IRoleRepository roleRepository;
@Autowired
private IAssetRepository assetRepository;
public IUserRepository getUserRepository() {
return userRepository;
}
public void setUserRepository(IUserRepository userRepository) {
this.userRepository = userRepository;
}
public IRoleRepository getRoleReposttory() {
return roleRepository;
}
public void setRoleReposttory(IRoleRepository roleRepository) {
this.roleRepository = roleRepository;
}
public IAssetRepository getAssetRepository() {
return assetRepository;
}
public void setAssetRepository(IAssetRepository assetRepository) {
this.assetRepository = assetRepository;
}
}
dao.xml
<!-- Scans within the base package of the application for @Components to configure as beans -->
<context:component-scan base-package="com.cisco.badges.data.*" />
<context:property-placeholder location="classpath:jdbc.properties"/>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"/>
<property name="annotatedClasses">
<list>
<value>com.cisco.badges.data.domain.User</value>
<value>com.cisco.badges.data.domain.Role</value>
<value>com.cisco.badges.data.domain.Asset</value>
<value>com.cisco.badges.data.domain.UserRole</value>
<value>com.cisco.badges.data.domain.UserRole$UserRolePK</value>
<value>com.cisco.badges.data.domain.UserAsset</value>
<value>com.cisco.badges.data.domain.UserAsset$UserAssetPK</value>
</list>
</property>
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
<tx:annotation-driven/>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
</beans>
userrepository.java
@Repository("userRepository")
public class UserRepository extends
BaseRepository<User, Long> implements
IUserRepository {
@Autowired
public UserRepository(SessionFactory sessionFactory) {
super(sessionFactory);
}
Si los beans * fueron * configurados correctamente, sus campos no serían nulos. Muéstranos la configuración. – skaffman
Agregué el xml y el repositorio de muestra. El mismo repositorio se puede inyectar manualmente siendo una propiedad en un controlador, pero dentro de este método estático no se está llenando. –
(a) ¿Por qué 'RepositoryManager' administra su propio singleton? (b) ¿Dónde se define 'RepositoryManager' en Spring? ¿En qué paquete está? (c) ¿Por qué declaras beans de repositorio explícitos cuando ya has declarado un componente escaneo? – skaffman