GWTP 프로젝트를 수행하고 Oracle 데이터베이스와의 연결에 스프링 데이터 JPA를 사용합니다. 구현을 사용하지 않고 저장소 인터페이스를 직접 사용하는 자습서를 읽었습니다. @Autowired는 필요에 따라 잘 작동했습니다. 동일한 전략을 사용하려고 시도했지만 @Autowired 주석이 전혀 작동하지 않는 것 같습니다. 여기 @Autowired는 스프링 데이터를 삽입하지 않습니다. JPA 저장소 - NullPointerException
내 저장소입니다 : 나는 (내가 편안하고 서비스를 사용) 내 서비스 구현에 @Autowired와 함께 주입하려고@Repository
public interface BugRepository extends JpaRepository<Bug, Long> {
List<Bug> findAll();
.....
}
:
: 여기@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Path("/bugs")
@Component
public class BugServiceImpl{
@Autowired
private BugRepository bugRepository;
@GET
@Path("/findAll")
public List<Bug> findAll() {
return bugRepository.findAll();
}
}
내 법인입니다
mainContact.xml 및 persistence.xml도 main/resources/META-INF에 있습니다.
<?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"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:p="http://www.springframework.org/schema/p"
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
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa-1.0.xsd
http://www.springframework.org/schema/jdbc
http://www.springframework.org/schema/jdbc/spring-jdbc.xsd">
<context:component-scan base-package="com.edu" />
<jpa:repositories base-package="com.edu.server.repositories" />
<context:annotation-config />
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.OracleDriver" />
<property name="url" value="***"/>
<property name="username" value="***"/>
<property name="password" value="***"/>
</bean>
<!-- EntityManagerFactory -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:packagesToScan="com.edu.shared.entity"
p:dataSource-ref="dataSource"
>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="true" />
<property name="showSql" value="false" />
</bean>
</property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
내의 persistence.xml :
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<!-- oracle -->
<persistence-unit name="oracle">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.edu.server.service.BugServiceImpl</class>
<class>com.edu.server.repositories.BugRepository</class>
<class>com.edu.shared.entity.Bug</class>
<properties>
<property name="hibernate.archive.autodetection" value="class" />
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver" />
<property name="hibernate.connection.url" value="***" />
<property name="hibernate.connection.username" value="***" />
<property name="hibernate.connection.password" value="***" />
<property name="hibernate.flushMode" value="FLUSH_AUTO" />
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
그리고 마지막으로 내가 할 예외가 있습니다 :
java.lang.NullPointerException
com.edu.server.service.BugServiceImpl.findAll(BugServiceImpl.java:39)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:606)
...
여기 내 applicationContext.xml이다 내가 디버그 일 전자 코드 및 중단 점을 autowired 저장소에 넣으십시오. 그래서 null로 보입니다. 그래서 제대로 삽입되지 않았으므로 findAll 메서드를 호출하면 NullPointerException이 발생합니다. 왜 @Autowired 어노테이션이 작동하지 않는 것 같습니까?
모든 클래스 (구성 요소, 서비스, 저장소가있는 주석 된 클래스)의 패키지는 com.edu로 시작됩니까? – Unknown
스프링 관리 콩이 아니고 저지에 의해 관리되기 때문에'@ Autowired'는 아무 것도하지 않습니다. 의존성을 만족할 수 없다면'@ Autowired' 필드는'null'이 될 수 없습니다. 응용 프로그램이 시작될 때 중단되고 (시작되지 않음) 실행 중에 중단되지 않습니다. 그것이 'null'일 때 당신은 클래스의 인스턴스를 직접 생성하고 있습니다 (즉, 새로운 BugServiceImpl') 또는 유 (Spring의 범위 밖에서 사용하고 있습니다.). 저지와 스프링이 올바르게 통합되도록 설정하십시오. 저어지가 어떻게 수행되는지는 저지 참조 안내서에 명확하게 설명되어 있습니다. –
persistance.xml에서 Bug와 같은 엔티티 bean 만 있고 Service 또는 Repos는 가지고 있지 않다고 가정합니다. (ServiceImpl에 따라 Repo가 있습니다.) – Mechkov