[英]Spring Autowired object is always Null
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 =================== ===============
<?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>
=======================主類========================
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始終為null,如何解決此問題找不到問題。
=========================用戶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>
我正在為此項目使用Java 8
Xml配置始終會覆蓋注釋配置。
解決方案之一是刪除
<bean id="userDAO" class="plantSiteMinder.dao.impl.UserDAOImpl" />
<bean id="userAuth"
class="plantSiteMinder.user.impl.UserAuthenticatorImpl"/>
從xml config中取消注釋這些行:
<context:annotation-config />
<context:component-scan base-package="plantSiteMinder.user.impl" />
<tx:annotation-driven transaction-manager="transactionManager"/>
您必須記住,盡管必須在DAo中@Autowire SessionFactory。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.