Printemps bean injection dans une méthode main de la classe
J'ai une application web avec spring 3.0. J'ai besoin d'exécuter une classe avec une méthode main à partir d'un cron qui utilise des haricots défini dans appcontext xml à l'aide du composant de balayage annocations). J'ai ma classe principale dans le même répertoire src.
Comment peut-on injecter des grains de contexte web dans la méthode principale. J'ai essayé de le faire en utilisant
ApplicationContext context = new ClassPathXmlApplicationContext("appservlet.xml");
J'ai essayé d'utiliser Autocâblés et elle renvoie une valeur null bean. J'ai donc utilisé l'Application ctx et c'est la création d'un nouveau contexte (comme prévu) lorsque j'exécute la méthode main. Mais est-il possible que je peux utiliser les haricots de conteneur.
@Autowired
static DAO dao;
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("xman- servlet.xml");
TableClient client = context.getBean(TableClient.class);
client.start(context);
}
Pour les futurs lecteurs, étroitement liés à la question: stackoverflow.com/questions/3659720/...
OriginalL'auteur riamob | 2011-11-29
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas injecter un Printemps fève dans n'importe quel objet qui n'a pas été créé d'ici le printemps. Une autre façon de dire ce qui est: le Printemps ne peut injecter dans les objets qu'il gère.
Depuis la création de ce contexte, vous aurez besoin de faire appel getBean pour votre objet DAO.
Découvrez Spring Batch il peut être utile pour vous.
OriginalL'auteur
Essayez avec cette Main:
Et ce Bean:
OriginalL'auteur
Vous pouvez utiliser un ressort contexte de votre application principale, et la réutilisation de la même fèves de la webapp. Vous pouvez même réutiliser une partie du Printemps des fichiers de configuration XML, à condition qu'ils ne définissent pas les haricots qui n'ont de sens que dans une webapp contexte (demande-champ d'application web, contrôleurs, etc.).
Mais vous obtiendrez différents cas, puisque vous avez deux machines virtuelles en cours d'exécution. Si vous voulez vraiment la réutilisation de la même haricot cas, alors votre classe principale à distance doit appeler une méthode d'un bean dans votre webapp, à l'aide d'un service web, ou HttpInvoker.
OriginalL'auteur
Afin de remédier à ce problème, j'ai créé https://jira.springsource.org/browse/SPR-9044. Si vous aimez l'approche proposée, merci de voter pour elle.
OriginalL'auteur
Printemps de démarrage fournit une solution officielle pour cette. Télécharger le squelette de
https://start.spring.io/
et assurez-vous que l'emballage dans le pom.xml est jeu jar. Tant que vous n'avez pas inclure le site web de la dépendance de l'application restera une application console.
OriginalL'auteur