java - Spring 应用程序失败,Autowire 在 main.class 中为 null

标签 java spring hibernate jpa jpa-2.0

我正在使用 netbeans 7.2、postgres sql、jpa2、hibernate 4.2。

我刚刚创建了一个新的 Maven 简单 java 项目(不是 webapp)。

但是我已经完成了 hibernate 和 jpa 的设置,但是 autowire "wpService"为 null(不确定是否是由 hibernate 配置引起的)。

这是我的项目文件(innovax.rar),如果您想测试它。 https://skydrive.live.com/#cid=837EF1FA9A4C06AE&id=837EF1FA9A4C06AE%21130

我的主课

package sg.com.innovax.Twitter;

import java.io.IOException;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import sg.com.innovax.Twitter.DBObject.service.impl.wall_postServiceImpl;

import sg.com.innovax.Twitter.DBObject.service.wall_postService;
import twitter4j.*;
public final class twitter {

    public static void main(String[] args) throws TwitterException {
        ApplicationContext context = new ClassPathXmlApplicationContext("application-context.xml");
        test a = new test();
    }
}

我的测试实例

    import org.springframework.beans.factory.annotation.Autowired;
    import sg.com.innovax.Twitter.DBObject.service.wall_postService;

    /**
     *
     * @author Nimamakaho
     */
    public class test {
            @Autowired
        private wall_postService wpService;
            test(){
// wpService is null when i break point here
                System.out.println("Asd");
            }
    }

我的墙柱对象

package sg.com.innovax.Twitter.DBObject;

import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.Timestamp;
import java.util.Formatter;

import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

@Entity
@Table(name = "wall_post")
@NamedQueries({
    @NamedQuery(name="wall_post.findById", query="select wp from wall_post wp where wp.id = :id")
     //  @NamedQuery(name="wall_post.getByHashtagsRecords", query="select wp.*,case when wpa.id is null then false else true end as ack from (select wp from wall_post wp where wp.id in (:id) ) as wp LEFT JOIN wall_post_acknowledgement wpa on wp.id = wpa.wall_post_id")
})
public class wall_post {
    @Id
    @SequenceGenerator(name="wall_post_id_seq", sequenceName="wall_post_id_seq", allocationSize=1)
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="wall_post_id_seq")
    @Basic(optional = false)
    private int id;
    private String title;
    private String message;
    private boolean enable_acknowledgement;
    private boolean enable_comment;
    private Timestamp created_time;
    private Timestamp edited_time;
    private Timestamp deleted_time;
    private Timestamp last_updated;

    public Timestamp getLast_updated() {
        return last_updated;
    }

    public void setLast_updated(Timestamp last_updated) {
        this.last_updated = last_updated;
    }
    private int user_id;


    public boolean isEnable_comment() {
        return enable_comment;
    }

    public void setEnable_comment(boolean enable_comment) {
        this.enable_comment = enable_comment;
    }


    public int getUser_id() {
        return user_id;
    }

    public void setUser_id(int user_id) {
        this.user_id = user_id;
    }
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public boolean isEnable_acknowledgement() {
        return enable_acknowledgement;
    }

    public void setEnable_acknowledgement(boolean enable_acknowledgement) {
        this.enable_acknowledgement = enable_acknowledgement;
    }



    public Timestamp getCreated_time() {
        return created_time;
    }

    public void setCreated_time(Timestamp created_time) {
        this.created_time = created_time;
    }

    public Timestamp getEdited_time() {
        return edited_time;
    }

    public void setEdited_time(Timestamp edited_time) {
        this.edited_time = edited_time;
    }

    public Timestamp getDeleted_time() {
        return deleted_time;
    }

    public void setDeleted_time(Timestamp deleted_time) {
        this.deleted_time = deleted_time;
    }
}

我的墙邮服务

package sg.com.innovax.Twitter.DBObject.service;

import java.util.List;
import sg.com.innovax.Twitter.DBObject.*;

public interface wall_postService {

        public wall_post findById(Integer id);
        public boolean isAuthorizeToAccess(int wallPostID,int userid);
}

我的墙贴服务实现

package sg.com.innovax.Twitter.DBObject.service.impl;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import javax.annotation.Resource;

import org.hibernate.HibernateException; 
import org.hibernate.Session; 
import org.hibernate.Transaction;
import org.hibernate.SessionFactory;
import org.hibernate.SQLQuery;
import org.hibernate.Criteria;
import org.hibernate.Hibernate;
import org.hibernate.cfg.Configuration;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.common.SolrInputDocument;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import sg.com.innovax.Twitter.DBObject.*;
import sg.com.innovax.Twitter.DBObject.service.wall_postService;

@Service
@Repository

public class wall_postServiceImpl implements wall_postService {
    private static final Logger logger = LoggerFactory.getLogger(wall_postServiceImpl.class);

    @PersistenceContext
    private EntityManager em;

    private EntityManagerFactory emf;

    @Override
    public wall_post findById(Integer id) {
        try{
            if(id == null) return null;
            TypedQuery<wall_post> query = em.createNamedQuery("wall_post.findById", wall_post.class);
            query.setParameter("id", id);
            return query.getSingleResult();
        }catch(NoResultException ex)
        {
            return null;
        }
        catch(Exception ex)
        {
            logger.error("=================================================");
            logger.error("findById()",ex);
            return null;
        }
    }


    public boolean isAuthorizeToAccess(int wallPostID,int userid) {
        try
        {
            String sql = 
                        " select wall_post_id from wall_post_authority where group_id in "+
                        "           (select group_id from group_user where user_id = :userid group by group_id) "+
                        " and wall_post_id = :wallPostID group by wall_post_id ";
            Query query = em.createNativeQuery(sql).setParameter("userid", userid).setParameter("wallPostID", wallPostID);
            Object a =  query.getSingleResult();
            return true;
        }catch(NoResultException ex)
        {
            return false;
        }
        catch(Exception ex)
        {
            logger.error("=================================================");
            logger.error("isAuthorizeToAccess()",ex);
            return false;
        }
    }
}

我的应用程序上下文 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:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-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.2.xsd">


    <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:postgresql://127.0.0.1:5432/testspring" />
        <property name="username" value="postgres" />
        <property name="password" value="admin" />
    </bean>
    <!-- Database 
    <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/test" />
        <property name="username" value="root" />
        <property name="password" value="admin" />
    </bean>

        -->
    <!-- Entity Manager -->
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
       <property name="dataSource" ref="datasource" />
       <property name="jpaVendorAdapter">
          <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
             <property name="database" value="POSTGRESQL" />
          </bean>
       </property>
       <property name="packagesToScan" value="sg.com.innovax" />
       <property name="jpaProperties">
           <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
           </props>
       </property>
     </bean>

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

    <!-- Jpa Repositories -->
    <jpa:repositories base-package="sg.com.innovax.Twitter"></jpa:repositories>
</beans>

这是我的 pom 文件

   <?xml version="1.0" encoding="UTF-8"?>
<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>sg.com.innovax</groupId>
  <artifactId>innovax</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
    <properties>
        <org.springframework-version>3.2.3.RELEASE</org.springframework-version>
        <org.springjpa-version>1.3.2.RELEASE</org.springjpa-version>
    </properties>


  <dependencies>
      <dependency>
        <groupId>org.twitter4j</groupId>
        <artifactId>twitter4j-core</artifactId>
        <version>3.0.3</version>
    </dependency>
    <dependency>
        <groupId>org.twitter4j</groupId>
        <artifactId>twitter4j-stream</artifactId>
        <version>3.0.3</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.1.9.Final</version>
    </dependency>
        <!-- Additional Analyzers: -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-search-analyzers</artifactId>
        <version>4.2.0.Final</version>
    </dependency>
    <!-- Infinispan integration: -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-search-infinispan</artifactId>
        <version>4.2.0.Final</version>
    </dependency>
        <dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.0-api</artifactId>
    <version>1.0.1.Final</version>
    </dependency>
    <dependency>
        <groupId>postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>9.1-901.jdbc4</version>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.22</version>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.3.170</version>
    </dependency>
   <!-- Spring -->
    <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>${org.springframework-version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>${org.springjpa-version}</version>
    </dependency>

        <!-- Logging -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.5.10</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>1.5.10</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.5.10</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.15</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.mail</groupId>
                    <artifactId>mail</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.jms</groupId>
                    <artifactId>jms</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jdmk</groupId>
                    <artifactId>jmxtools</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.sun.jmx</groupId>
                    <artifactId>jmxri</artifactId>
                </exclusion>
            </exclusions>
            <scope>runtime</scope>
        </dependency>

  </dependencies>
</project>

最佳答案

据我所知,您无法 Autowiring 静态字段。作为实例成员尝试一下,看看是否能解决您的问题。

关于java - Spring 应用程序失败,Autowire 在 main.class 中为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16914656/

相关文章:

java - 马文 : How do you deal with dependencies that are both direct and transitive?

java - Spring MVC 绑定(bind)

java - mvn install 在 eclipse 中不起作用,但在命令行中工作正常

java - 在 Hibernate 中,如何仅在序列化期间而不是在反序列化期间忽略属性

java - 更新和返回 在 java jdbc 代码中的同一查询中使用返回关键字更新列

JavaFX WebView : how to check if form is valid?

java - 字符串拆分()无法正常工作

java - 如何将H2数据库文件存储到项目目录中

java - 部分页面Spring Security重认证

java - 如何在hibernate中使用作为另一个表的复合主键的外键的一部分作为主键?