@Autocâblés bean est nulle lorsqu'elle est référencée dans le constructeur d'un autre bean
Indiqué ci-dessous est un extrait de code où j'essaie de référence et de mon ApplicationProperties bean. Quand j'référence du constructeur qu'il est nul, mais lorsqu'ils sont référencés à partir d'une autre méthode, il est très bien. Jusqu'à maintenant, je n'ai pas eu aucun problème avec ce autocâblés bean dans d'autres classes. Mais c'est la première fois que j'ai essayé de l'utiliser dans le constructeur d'une autre classe.
Dans l'extrait de code ci-dessous applicationProperties est nulle lorsqu'elle est appelée à partir du constructeur, mais lorsqu'il est référencé dans le convertir méthode qu'elle ne l'est pas. Ce qui me manque
@Component
public class DocumentManager implements IDocumentManager {
private Log logger = LogFactory.getLog(this.getClass());
private OfficeManager officeManager = null;
private ConverterService converterService = null;
@Autowired
private IApplicationProperties applicationProperties;
//If I try and use the Autowired applicationProperties bean in the constructor
//it is null ?
public DocumentManager() {
startOOServer();
}
private void startOOServer() {
if (applicationProperties != null) {
if (applicationProperties.getStartOOServer()) {
try {
if (this.officeManager == null) {
this.officeManager = new DefaultOfficeManagerConfiguration()
.buildOfficeManager();
this.officeManager.start();
this.converterService = new ConverterService(this.officeManager);
}
} catch (Throwable e){
logger.error(e);
}
}
}
}
public byte[] convert(byte[] inputData, String sourceExtension, String targetExtension) {
byte[] result = null;
startOOServer();
...
Ci-dessous est extrait de ApplicationProperties ...
@Component
public class ApplicationProperties implements IApplicationProperties {
/* Use the appProperties bean defined in WEB-INF/applicationContext.xml
* which in turn uses resources/server.properties
*/
@Resource(name="appProperties")
private Properties appProperties;
public Boolean getStartOOServer() {
String val = appProperties.getProperty("startOOServer", "false");
if( val == null ) return false;
val = val.trim();
return val.equalsIgnoreCase("true") || val.equalsIgnoreCase("on") || val.equalsIgnoreCase("yes");
}
- Pouvons-nous voir votre xml?
Vous devez vous connecter pour publier un commentaire.
Permettra à l'autowiring (lien de Dunes commentaire) qui se passe après la construction d'un objet. Par conséquent, ils ne seront pas ensemble jusqu'à ce que après le constructeur a terminé.
Si vous avez besoin d'exécuter du code d'initialisation, vous devriez être en mesure de tirer le code dans le constructeur dans une méthode, et d'annoter la méthode
@PostConstruct
.Pour avoir des dépendances injecté au moment de la construction, vous devez avoir votre constructeur marqué avec le
@Autowired
annoation comme si.