2017-03-23 11 views
0
package plantSiteMinder.user.impl; 
import java.util.List; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 
import org.springframework.transaction.annotation.Transactional; 
import plantSiteMinder.dao.UserDAO; 
import plantSiteMinder.model.User; 
import plantSiteMinder.user.UserAuthenticator; 
@Service 
@Transactional(readOnly = true) 
public class UserAuthenticatorImpl implements UserAuthenticator { 
    @Autowired 
    private UserDAO userDAO; 
    public List<User> findAllUsers() { 
     return userDAO.findAllUsers(); 
    } 
} 

============================ Spring.xml ======= ===========================Frühling Autowired Objekt ist immer Null

<?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: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.xsd"> 
<!-- <tx:annotation-driven /> --> 
<bean id="userDAO" class="plantSiteMinder.dao.impl.UserDAOImpl" /> 
<bean id="userAuth"  
class="plantSiteMinder.user.impl.UserAuthenticatorImpl"/> 
<!-- <context:component-scan base-package="plantSiteMinder.dao.impl" /> 
<context:component-scan base-package="plantSiteMinder.user.impl" /> --> 
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" 
    destroy-method="close"> 
    <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
    <property name="url" value="jdbc:mysql://localhost:3306/poc_data" /> 
    <property name="username" value="root" /> 
    <property name="password" value="root" /> 
</bean> 

<bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="myPU" /> 
    <property name="dataSource" ref="dataSource" /> 
</bean> 

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

============ =========== Hauptklasse =======================

package plantSiteMinder.plantSiteMinder; 
import java.util.List; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 
import plantSiteMinder.model.User; 
import plantSiteMinder.user.impl.UserAuthenticatorImpl; 
public class App 
{ 
    public static void main(String[] args) 
    { 
     ApplicationContext ctx = new ClassPathXmlApplicationContext(
      "spring.xml"); 

     UserAuthenticatorImpl userManager = (UserAuthenticatorImpl) 
     ctx.getBean("userAuth"); 
     List<User> list = userManager.findAllUsers(); 
     System.out.println("User count: " + list.size()); 
    } 

}

UserDAO ist immer null. Wie kann dies behoben werden? Das Problem kann nicht gefunden werden.

========================= Benutzer DAO Impl ================== =========

package plantSiteMinder.dao.impl; 
import java.util.List; 
import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 
import javax.persistence.criteria.CriteriaBuilder; 
import javax.persistence.criteria.CriteriaQuery; 
import javax.persistence.criteria.Root; 
import org.springframework.stereotype.Repository; 
import plantSiteMinder.dao.UserDAO; 
import plantSiteMinder.model.User; 
@Repository 
public class UserDAOImpl implements UserDAO{ 
    @PersistenceContext 
    private EntityManager entityManager; 
    public List<User> findAllUsers() { 
    CriteriaBuilder builder = entityManager.getCriteriaBuilder(); 
    CriteriaQuery<User> cq = builder.createQuery(User.class); 
    Root<User> root = cq.from(User.class); 
    cq.select(root); 
    return entityManager.createQuery(cq).getResultList(); 
    } 
} 

======================= pom.xml ======== ================

<project xmlns="http://maven.apache.org/POM/4.0.0"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  
http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>plantSiteMinder</groupId> 
<artifactId>plantSiteMinder</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>jar</packaging> 
<name>plantSiteMinder</name> 
<url>http://maven.apache.org</url> 
<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <spring.version>4.0.3.RELEASE</spring.version> 
    <hibernate.version>4.3.5.Final</hibernate.version> 
</properties> 
<dependencies> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>${hibernate.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.commons</groupId> 
     <artifactId>commons-dbcp2</artifactId> 
     <version>2.0</version> 
    </dependency> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.30</version> 
    </dependency> 
</dependencies> 

I am using Java 8 for this project

+0

Sie verwenden die XML-Konfiguration und die automatische Verkabelung ist standardmäßig deaktiviert. Sie müssen entweder '' hinzufügen, um die auf Annotation basierende Konfiguration zu wechseln oder '' hinzufügen und Ihre Beans automatisch erkennen, anstatt sie explizit in XML zu definieren. –

+0

going '' Weg führt zu diesem Fehler 'java.lang.NoSuchMethodError: org.springframework.beans.factory.support.DefaultListableBeanFactory.getDependencyComparator() Ljava/util/Comparator;' –

+0

going ' 'führt zu 'BeanDefinitionStoreException: Fehler beim Lesen der Kandidaten-Komponente class: file [C: \ Benutzer \ mayank.jalotra \ workspace \ plantSiteMinder \ target \ clsses \ plantSiteMinde r \ dao \ impl \ UserDAOIm Pl.class]; verschachtelte Ausnahme ist java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetadataRead ingVisitor hat Schnittstelle org.springframework.asm.ClassVisitor als Superklasse –

Antwort

0

XML-Konfigurations immer überschreibt die Annotation-Konfig.

Eine der Lösungen wäre

<bean id="userDAO" class="plantSiteMinder.dao.impl.UserDAOImpl" /> 
<bean id="userAuth"  
class="plantSiteMinder.user.impl.UserAuthenticatorImpl"/> 

von XML-Konfigurations zu entfernen und Kommentar- diese Zeilen:

<context:annotation-config /> 
<context:component-scan base-package="plantSiteMinder.user.impl" /> 

<tx:annotation-driven transaction-manager="transactionManager"/> 

Sie müssen bedenken Sie aber, dass Sie die Session müssten @Autowire in Ihrem DAo.

+0

Adding Component Scan gibt einen anderen Fehler, wegen dem ich diese entfernt habe, hier ist es: BeanDefinitionStoreException: Fehler beim Lesen der Kandidaten-Komponente Klasse: Datei [C: \ Users \ mayank.jalotra \ workspace \ plantSiteMinder \ target \ classes \ plantSiteMinder \ dao \ impl \ BenutzerDAOImpl.class]; verschachtelte Ausnahme ist java.lang.IncompatibleClassChangeError: Klasse org.springframework.core.type.classreading.ClassMetadataReadingVisitor hat Schnittstelle org.springframework.asm.ClassVisitor als Superklasse –

+0

ok versuchen, die Definition der Klasse zum Beitrag hinzuzufügen –

+0

hinzugefügt haben UserDAOImpl –