printemps autowire ne fonctionne pas retourner null
je suis en train d'apprendre le printemps maintenant. voici mon exemple de code. je suis l'aide de jersey, spring, hibernate, mysql et pour mon service REST.
CustomerServiceImpl.java
qui est le point de terminaison REST (partielle code)
package com.samples.service.impl;
@Path("customers")
public class CustomerServiceImpl implements CustomerService {
private static Logger logger = Logger.getLogger(CustomerServiceImpl.class);
@Autowired
CustomerBO customerBO;
ici est CustomerBOImpl.java
(partielle code)
package com.samples.BO.impl;
@Component
public class CustomerBOImpl implements CustomerBO {
@Autowired
CustomerDAO customerDAO;
@Autowired
CustomerAdapter customerAdapter;
CustomerDAOImpl.class
package com.les échantillons.DAO.impl;
@Repository
public class CustomerDAOImpl implements CustomerDAO {
c'est applicationContext.xml
<?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"
xmlns:tx="http://www.springframework.org/schema/tx"
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
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">
<context:property-placeholder location="classpath*:database.properties"/>
<context:component-scan base-package="com.samples"/>
<context:annotation-config />
</beans>
c'est premières lignes de l'exception que je suis.
http-bio-8090-exec-1] [class: CustomerServiceImpl] INFO - list all customers
[http-bio-8090-exec-1] [class: CustomerServiceImpl] INFO - customerBO is null
May 08, 2014 10:55:29 AM com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException
SEVERE: The RuntimeException could not be mapped to a response, re-throwing to the HTTP container
java.lang.NullPointerException
at com.samples.service.impl.CustomerServiceImpl.getAllCustomers(CustomerServiceImpl.java:40)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvo
c'est web.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>Employee Service</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:applicationContext.xml
</param-value>
</context-param>
<context-param>
<param-name>initializeContextOnStartup</param-name>
<param-value>true</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.samples.service</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
donc, si je suis de comprendre comment cela fonctionne correctement, je suis configuring xml
avoir mes composants autoscanned en offrant le paquet dans lequel je veux exécuter la fonction autoscan. et pour les objets que je veux autowire. dans CustomerServiceImpl
classe, j'utilise @autocâblés pour customerBO
objet qui devrait ont été analysés par @Composante annotation sur CustomerBOImpl.class définition. pouvez-vous s'il vous plaît aider pourquoi mon auto-analyse n'est pas de ramasser autocâblés customerBO objet?
merci.
oui, je le suis. la pleine mise en œuvre utilise maven, spring, jersey, hibernate, c3p0, mysql. mais il est encore lite poids exercice pour moi. c'est simple service REST.
Souvenez-vous d'avoir à le faire - voir cette answer
Comment êtes-vous l'instanciation de la
CustomerServiceImpl
? Le printemps devrait lever une exception si elle ne parvient pas à autowire une dépendance...chris, je suis l'aide de jersey, je suis donc en utilisant @Chemin d'annotation pour le jersey à ramasser la ressource. je ne vois pas de autowire dépendance des erreurs dans le journal. c'est juste que autocâblés bean est en fait nulle qui est mon problème.
OriginalL'auteur user3590506 | 2014-05-08
Vous devez vous connecter pour publier un commentaire.
Je soupçonne que le problème, c'est votre
CustomerServiceImpl
classe est instanciée à l'extérieur de Printemps, soit par le conteneur de servlet ou explicitement dans votre code. Vous avez besoin de disposer de Printemps de l'instancier (en lui faisant unbean
, etc) ou de l'utilisation<context:spring-configured/>
. Je ne suis pas sûr si ce dernier ne fonctionnera que si le conteneur de servlet instancie l'objet tel qu'il dépendra probablement de l'ordre dans lequel les choses se produisent...OriginalL'auteur Chris Thompson
Printemps savons seulement de autowire les champs qui ont été marqués comme des haricots. À partir de votre code
CustomerDAO
n'est pas un haricot. Par exemple, pour le définir comme un haricot dans le fichier xml de configuration, vous devez ajouter
ou à la classe annotée avec<bean id="customerDao" class="com.packagesNames.CustomerDaoImpl"/> in the xml file.
@Component
ou de l'avoir défini avec@Bean
dans un@Configuration
classe.OriginalL'auteur m3th0dman
Jersey 2 et le Printemps de l'intégration est désormais pris en charge.
Jersey Docs: Chapitre 22. Printemps DI
Blog: La Mise En Œuvre De Jersey 2 Spring Integration
Exemple D'Application: Jersey Bonjour tout le Monde Ressort WebApp
Cependant, de cette écriture, beans Spring ne peut pas être injecté directement dans JAX-RS classes en utilisant le Printemps de configuration XML. Annotations (
@Autowired
, etc.) doit être utilisé.OriginalL'auteur Victor Lyuboslavsky
J'ai eu le même problème. Mon bean injecté dans la classe de ressources était toujours à venir comme
NULL
.J'ai passé 2 jours à essayer de comprendre pourquoi je ne peux pas injecter le Printemps Fève dans la JAX-RS classe de ressource. Puis j'ai trouvé le ci-dessous dans la Maillot de documentation:
Remarque: j'ai été en utilisant Jersey 2 et le Printemps 3.x dans mon projet.
OriginalL'auteur user3923737