Java SPRING-@自动连线和@Service不工作

Java SPRING-@自动连线和@Service不工作,java,spring,spring-mvc,annotations,Java,Spring,Spring Mvc,Annotations,我知道这里面有很多问题,我读了很多书,没有人能帮我。谢谢你帮助我 我不喜欢spring用xml定义每个bean的方式,所以我在应用程序上下文中使用了一个扫描器,但我认为只有sacan可以捕获@Component(我的托管bean),但它不想捕获@Service和@Repository,因为我的服务是空的 这就是web.xml中的spring内容 <!-- Archivo de configuraciones de Spring y JSF --> <context-pa

我知道这里面有很多问题,我读了很多书,没有人能帮我。谢谢你帮助我

我不喜欢spring用xml定义每个bean的方式,所以我在应用程序上下文中使用了一个扫描器,但我认为只有sacan可以捕获@Component(我的托管bean),但它不想捕获@Service和@Repository,因为我的服务是空的

这就是web.xml中的spring内容

<!-- Archivo de configuraciones de Spring y JSF -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:WEB-INF/context/applicationContext*.xml</param-value>
    </context-param>

    <!-- Línea especial para la integración con un Java-based web framework (JSF) -->    
    <listener>
        <listener-lass>org.springframework.web.context.ContextLoaderListener    
所以我打电话给我的helloService是

  @Service
public class HelloServiceImpl implements HelloService{

    @Autowired
    protected HelloRepository helloRepository;

    @Override
    public String saludar(String nombre) {
        return helloRepository.saludar(nombre);
    }

}
我的存储库是

  @Repository
    public class HelloRepositoryImpl implements HelloRepository {

        @Override
        public String saludar(String nombre) {
            return "Hola "+nombre+", estás haciendo un excelente trabajo";
        }

    }

问题是我在我的“saludar”方法中得到了
NullPointerException
,在调试中,我的服务为null,并且不是helloServiceImpl的实例,所以我猜@Autowired它不工作

我得到的所有帮助都将是巨大的,我已经失去了两个星期,什么也没有。谢谢大家

阅读页面,您需要设置:

   <!-- JSF and Spring are integrated -->
   <application>
     <el-resolver>
      org.springframework.web.jsf.el.SpringBeanFacesELResolver
     </el-resolver>
   </application>

org.springframework.web.jsf.el.SpringBeanFacesELResolver

在您的faces config.xml中,使用
@ManagedProperty(value=“#{name of your service}”)
引用Springbean,而不是
@Autowired

好吧,我不知道为什么在文件位置的定义中使用classpath,因此,我想到了classpath以及当有人将“classpath*:directory/file.ext”强制IDE在放入java类时在SRC路径中搜索该文件。很明显,在那里没有文件夹(在我的配置项目中),因此删除定义中的类路径就可以了

所以,如果这对任何人都有用的话,我很高兴。我要感谢你们所有人花时间和考虑来回答。谢谢

这是我的项目结构。我在使用netbeans,这个页面说我不能发布图片,好让你链接

和我的配置文件

Web.xml

 <!-- Archivo de configuraciones de Spring y JSF -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>WEB-INF/context/applicationContext*.xml</param-value>
</context-param>

上下文配置位置
WEB-INF/context/applicationContext*.xml
applicationContext.xml

 <context:spring-configured/>     

    <!-- Escanear todos los componentes y beans en vez de instanciar 1 por 1 -->
    <context:component-scan base-package="paquete" />

    <mvc:annotation-driven />

     <!-- Identificar todos los beans por las anotaciones -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

    <!-- Archivo de propiedades configurables (database, messages, etc) -->
    <context:property-placeholder  location="classpath*:META-INF/*.properties"/>


    <!-- Gestor de transacciones de SPRING -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

    <bean class="org.springframework.orm.jpa.JpaTransactionManager"     id="transactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>

    <!-- El conversador entre nuestras entidades y las tablas de BD -->
    <bean id="entityManagerFactory"
          class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="persistenceUnit" />
        <property name="persistenceXmlLocation" value="classpath:/WEB-INF/persistence.xml" />
        <property name="dataSource" ref="dataSource" />
        <property name="loadTimeWeaver">
            <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
        </property>
        <property name="jpaVendorAdapter" ref="vendorAdapter" />
    </bean>

    <!-- Integración de Spring e Hibernate, no es obligatorio -->
    <bean id="vendorAdapter"
          class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
        <property name="databasePlatform" value="${hibernate.dialect}" />
        <property name="showSql" value="${hibernate.show_sql}" />
        <property name="generateDdl" value="true" />
    </bean>

    <!-- Formalidad de dataSource de SPRING -->
    <bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
        <property name="driverClassName" value="${database.driverClassName}"/>
        <property name="url" value="${database.url}"/>
        <property name="username" value="${database.username}"/>
        <property name="password" value="${database.password}"/>
        <property name="testOnBorrow" value="true"/>
        <property name="testOnReturn" value="true"/>
        <property name="testWhileIdle" value="true"/>
        <property name="timeBetweenEvictionRunsMillis" value="1800000"/>
        <property name="numTestsPerEvictionRun" value="3"/>
        <property name="minEvictableIdleTimeMillis" value="1800000"/>
    </bean>
...
...  
<!-- Archivo de propiedades configurables (database, messages, etc) -->
<context:property-placeholder  location="META-INF/database.properties"/>
...
...
 <!-- El conversador entre nuestras entidades y las tablas de BD -->
<bean id="entityManagerFactory"
      class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="persistenceUnit" />
    <property name="persistenceXmlLocation" value="WEB-INF/persistence.xml" />
    <property name="dataSource" ref="dataSource" />
    <property name="loadTimeWeaver">
        <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
    </property>
    <property name="jpaVendorAdapter" ref="vendorAdapter" />
</bean>
。。。
...  
...
...

如果有人能告诉我类路径的想法是正确的还是错误的,我会很感激。问候

服务是否位于paquete包下?比如…paquete.some.package.path.HelloServiceImpl?其中“saludar”是例外?是的,“paquete”包是主包,我有3个包,所以我有包:“paquete.beans”,“paquete.repository”和“paquete.service”。我的合作伙伴说,阅读服务和存储库没关系。当我调用service.saludar(name)时,我在helloJSFBean中的“saludar”方法中获得空指针。谢谢,我会尝试一下,在我用来指导我的示例项目中,他们不使用ManagedProperty,只使用服务和存储库注释,在组件扫描程序中调用主包。谢谢你,我会尽力去评论的。对不起,那不行。我照你说的做了,但我仍然有空指针。我在一个bean、服务和存储库中放置了一个postconstruct,println表示hi,只有bean说hi,服务和存储库没有初始化,谢谢4 help,但是其他bean(entityManagerFactory、transactionManager)正在初始化,对吗?我在日志中没有看到entityManagerFactory、transactionManager的任何信息。。在这一刻,我的项目中没有任何实体,我从服务和那些东西开始,当我得到那个好的时候,我会从实体开始。我将对bd的引用设置为一个带有2个属性的表。如何保证这些bean的初始化?如果您的服务是由Spring实例化的,那么将transactionManager或entityManagerFactory添加到您的服务中(使用setter或autowiring),并检查它们是否为null。您可以稍后删除它们。
...
...  
<!-- Archivo de propiedades configurables (database, messages, etc) -->
<context:property-placeholder  location="META-INF/database.properties"/>
...
...
 <!-- El conversador entre nuestras entidades y las tablas de BD -->
<bean id="entityManagerFactory"
      class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="persistenceUnit" />
    <property name="persistenceXmlLocation" value="WEB-INF/persistence.xml" />
    <property name="dataSource" ref="dataSource" />
    <property name="loadTimeWeaver">
        <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
    </property>
    <property name="jpaVendorAdapter" ref="vendorAdapter" />
</bean>