Printemps Autowire échec Sans qualification bean de type trouvé pour erreur de dépendance

Voici mon scénario. Mon projet est à l'aide de Printemps (3.2.3.La LIBÉRATION), Struts2 (2.3.14.3) et JPA (2.0). Nous avons un projet (Un projet) qui contient diverses entités et les classes communes. Nous utilisons Un projet pour générer un .fichier jar, de sorte que d'autres projets peuvent utiliser ces classes. Dans Un projet, nous avons utilisé le Printemps des stéréotypes: @Composant. @Service ou @Référentiel pour ces classes, nous voulons Printemps à injecter. Chaque fois que nous essayons d'injecter des haricots à partir du pot, nous obtenons un message d'erreur similaire à:

  1. Pas admissible bean de type
    [com.ceiwc.en colombie-britannique.commonsql.service.CommonSQLService] pour
    dépendance: attendre au moins 1 fève qui se qualifie comme autowire
    candidat à cette dépendance. La dépendance des annotations:
    {@org.springframework.les haricots.usine.annotation.Autocâblés(required=true)}

  2. Ne pouvait pas autowire domaine privé: com.ceiwc.en colombie-britannique.commonsql.service.CommonSQLService
    com.ceiwc.ma.mvc.d'action.LoginAction.commonSQLService; nested exception
    est org.springframework.les haricots.usine.NoSuchBeanDefinitionException: Aucun
    qualification bean de type
    [com.ceiwc.en colombie-britannique.commonsql.service.CommonSQLService] pour
    dépendance: attendre au moins 1 fève qui se qualifie comme autowire
    candidat à cette dépendance. La dépendance des annotations:
    {@org.springframework.les haricots.usine.annotation.Autocâblés(required=true)}

  3. Erreur lors de la création de haricots avec le nom " com.ceiwc.ma.mvc.d'action.LoginAction': Injection de autocâblés
    dépendances a échoué; nested exception est
    org.springframework.les haricots.usine.BeanCreationException: ne Peut pas
    autowire domaine: privé
    com.ceiwc.en colombie-britannique.commonsql.service.CommonSQLService
    com.ceiwc.ma.mvc.d'action.LoginAction.commonSQLService; nested exception
    est org.springframework.les haricots.usine.NoSuchBeanDefinitionException: Aucun
    qualification bean de type
    [com.ceiwc.en colombie-britannique.commonsql.service.CommonSQLService] pour
    dépendance: attendre au moins 1 fève qui se qualifie comme autowire
    candidat à cette dépendance. La dépendance des annotations:
    {@org.springframework.les haricots.usine.annotation.Autocâblés(required=true)}

  4. Impossible d'instancier Action, com.ceiwc.ma.mvc.d'action.LoginAction, définie à 'doLogin' dans l'espace de noms " /Login'Error la création de haricot avec
    nom com.ceiwc.ma.mvc.d'action.LoginAction': Injection de autocâblés
    dépendances a échoué; nested exception est
    org.springframework.les haricots.usine.BeanCreationException: ne Peut pas
    autowire domaine: privé
    com.ceiwc.en colombie-britannique.commonsql.service.CommonSQLService
    com.ceiwc.ma.mvc.d'action.LoginAction.commonSQLService; nested exception
    est org.springframework.les haricots.usine.NoSuchBeanDefinitionException: Aucun
    qualification bean de type
    [com.ceiwc.en colombie-britannique.commonsql.service.CommonSQLService] pour
    dépendance: attendre au moins 1 fève qui se qualifie comme autowire
    candidat à cette dépendance. La dépendance des annotations:
    {@org.springframework.les haricots.usine.annotation.Autocâblés(required=true)}

Nous sommes à l'aide de Java configuration pour le Printemps. Voici notre classe de configuration:

package com.zzz.bc.config;
@Configuration
@ImportResource({"/WEB-INF/spring/spring-config.xml"})
@ComponentScan(basePackages = "com.zzz")
public class ApplicationConfig {
@Bean
public JavaMailSender mailSender() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost(${app.mail.host});
return mailSender;
}
}
package com.zzz.bc.config;
@Configuration
@EnableTransactionManagement
@Import(ApplicationConfig.class)
@PropertySource({"classpath:db.properties"})
public class DataConfig {
@Autowired
Environment environment;
@Bean
public PlatformTransactionManager transactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject());
return transactionManager;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {
String[] packagesToScan =
{environment.getProperty("db.packagesToScan1"), environment.getProperty("db.packagesToScan2")};
Map<String, Object> jpaProperties = new HashMap<String, Object>();
jpaProperties.put("eclipselink.weaving", "false");
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
entityManagerFactoryBean.setDataSource(dataSource());
entityManagerFactoryBean.setPackagesToScan(packagesToScan);
entityManagerFactoryBean.setLoadTimeWeaver(new InstrumentationLoadTimeWeaver());
entityManagerFactoryBean.setJpaVendorAdapter(vendorAdapter());
entityManagerFactoryBean.setJpaPropertyMap(jpaProperties);
return entityManagerFactoryBean;
}
@Bean
public DriverManagerDataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(environment.getProperty("db.driver"));
dataSource.setUrl(environment.getProperty("db.url"));
dataSource.setUsername(environment.getProperty("db.username"));
dataSource.setPassword(environment.getProperty("db.password"));
return dataSource;
}
@Bean
public JpaVendorAdapter vendorAdapter() {
EclipseLinkJpaVendorAdapter vendorAdapter = new EclipseLinkJpaVendorAdapter();
vendorAdapter.setDatabase(Database.ORACLE);
vendorAdapter.setShowSql(true);
return vendorAdapter;
}
@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
return new PersistenceExceptionTranslationPostProcessor();
}
}

Nous avons @ComponentScan vérification de haricot dans le package de com.zzz. Dans le projet B, nous avons un Struts2 Action que nous voulons injecter un haricot de projet A. Voici un extrait de la classe à partir d'un projet B:

@SuppressWarnings("rawtypes")
@Service("CommonSQLService")
public class CommonSQLServiceImpl implements CommonSQLService {
@Autowired
CommonSQLDao cdao;
@Override
public Policy getPolicyById(String policyNo) {
return cdao.getPolicyById(policyNo);
}
@Override
public Policy getPolicy(Policy parmRec) {
return cdao.getPolicy(parmRec);
}
@Override
public ArrayList<Policy> getPolicies(String policyNo) {
return cdao.getPolicies(policyNo);
}
@Override
public List<Policy> getPolicies(Policy parmRec){
return cdao.getPolicies(parmRec);
}
}

Ici est de notre action (enlevé les getters/setters):

package com.zzz.ma.mvc.action;
@SuppressWarnings("serial")
@Component
@Scope("prototype")
@Namespace("/Login")
public class LoginAction extends ActionParent {
@Autowired
private IUserService userService; //Contained in project B
@Autowired
private CommonSQLService commonSQLService; //What's autowired from project A
private User user;
private String updateFlag;
private Integer parentMenuId;
private IwifWebNavmenuItem record;
public static final String LOGIN_STR = "login";
@Action(value = "doLogin", results = { @Result(name = "success", location = "/pages/login.jsp") })
public String login() {
updateFlag = "Y";
return SUCCESS;
}
@Action(value = "validate", results = {
@Result(name = "success", location = "/BrowseOptions/showOptions", type = "redirect"),
@Result(name = "login", location = "/pages/login.jsp") })
public String validateUser() {
if (updateFlag == null) {
session.remove(LOGIN_STR);
return LOGIN;
}
if (userService.validateUser(user.getUsername(), user.getPassword()) == null) {
addActionError(getText("invalid.user"));
return LOGIN;
}
session.put(LOGIN_STR, user.getUsername());
return SUCCESS;
}
@Action(value = "logout", results = { @Result(name = "success", location = "/pages/login.jsp") })
public String logout() {
updateFlag = StringUtils.EMPTY;
session.invalidate();
return SUCCESS;
}
}

Chaque fois que nous essayons de faire ce autowire, nous obtenons un message d'erreur semblable à l'un de ceux énumérés ci-dessus. Ce qui nous manque? Ne peut pas les classes contenues dans un fichier jar avec le Printemps, les Stéréotypes être autocâblés?

Merci pour votre aide à l'avance!

OriginalL'auteur NuAlphaMan | 2013-08-27