2016-06-22 2 views
0

Привет друзья я создаю простое приложение с использованием Spring и Hibernate JPA над но я получаю исключение нулевого указателя во время работы приложения, как бобы не получают initialised.Below мой application-context.xmlBean не получает Autowired

<beans> 
    <mvc:annotation-driven/> 
    <bean id="entityManagerFactoryBean" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="packagesToScan" value="com.sms.examination.entity.*" /> 
     </property> 
     <property name="jpaProperties"> 
      <props> 
       <prop key="hibernate.hbm2ddl.auto">validate</prop> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> 
      </props> 
     </property> 
    </bean> 
    <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/examination" /> 
     <property name="username" value="root" /> 
     <property name="password" value="" /> 
    </bean> 
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactoryBean" /> 
    </bean> 
    <tx:annotation-driven/> 
</beans> 

NameDao Интерфейс: -

package com.sms.examination.dao; 

import java.util.List; 
import com.sms.examination.entity.Name; 

public interface NameDao { 
    public List<Name> findAll(); 
} 

Реализация

package com.sms.examination.dao; 

import java.util.List; 
import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 

import org.springframework.stereotype.Component; 
import org.springframework.stereotype.Repository; 
import org.springframework.transaction.annotation.Transactional; 
import com.sms.examination.entity.Name; 

@Repository 
@Transactional 
@Component 
public class NamedaoImpl implements NameDao 
{ 
    @PrsistenceContext 
    private EntityManager entityManagerFactoryBean; 

    public List<Name> findAll() { 
     if(entityManagerFactoryBean==null) 
     { 
      System.out.println("manager is null"); 
     } 
     else 
      System.out.println("manager is not null"); 

     List<Name> names = entityManagerFactoryBean.createQuery("select s from Name s",Name.class).getResultList(); 
      return names; 
    } 
} 

Контроллер

package com.sms.examination.controller; 

    import java.util.*; 
    import com.sms.examination.dao.NameDao; 
    import com.sms.examination.dao.NamedaoImpl; 
    import com.sms.examination.entity.Name; 
    import org.springframework.beans.factory.annotation.Autowired; 
    import org.springframework.context.support.ClassPathXmlApplicationContext; 

    public class NameController { 
      @Autowired 
      private NameDao namedao; 
      @Autowired 
      private NamedaoImpl name; 
      public void getNames(){ 
       List<Name> namelist=new ArrayList<Name>(); 
       if(namedao==null) 
       { 
        System.out.println("name doa is null"); 
       } 
       namelist=namedao.findAll(); 
       Iterator<Name> it=namelist.iterator(); 
       while(it.hasNext()) 
       { 
        System.out.println(it.hasNext()); 
       } 
      } 
      public static void main(String[] args) { 
       ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:application-context.xml"); 
       NameController names=new NameController(); 
       names.getNames(); 
      } 
    } 

Во время работы класса Controller я получаю ниже output.Please помочь имя DOA является null, которая происходит потому, что NameDao класс не initailised.

+2

Используйте контроллер из контекста не следует создавать новый экземпляр и добавить '@ ontroller' к контроллеру. И удалите '@ Component' из вашего dao. –

+0

Когда вы создаете объект с помощью 'new', как вы делаете с' new NameController() 'в вашем' main' методе, то это не управляемый Spring компонент, и автоустановка не работает. Не создавайте контроллер с помощью 'new'; добавьте аннотацию '@ Controller' к вашему классу' NameController' и просмотрите его в контексте Spring. – Jesper

ответ

0

Вам нужно добавить компонент сканирования в контексте приложения

<context:component-scan base-package="com.sms.examination" /> 
+0

Мне жаль, что это уже было пропущено, чтобы добавить эту строку в код. Код по-прежнему не работает. –

+0

@iftekharkhan какая версия весны вы используете – LynAs