2017-03-08 18 views
0

내 applicationContext.xml 파일에서 만든 빈입니다.org.springframework.beans.NotWritablePropertyException. setter의 매개 변수 유형이 getter의 반환 유형과 일치합니까?

<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/employeelist" /> 
      <property name="username" value="root" /> 
      <property name="password" value= xxxxxx /> 
     </bean> 

     <bean id="sessionFactory" 
      class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 

      <property name="dataSource"> 
       <ref bean="dataSource" /> 
      </property> 

      <property name="hibernateProperties"> 
       <props> 
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
        <prop key="hibernate.show_sql">true</prop> 
       </props> 
      </property> 
      <property name="annotatedClasses"> 
      <list> 
        <value>com.aspire.model.Employee</value> 
      </list> 
      </property> 
     </bean> 
     <bean id ="registrationService" class = "com.aspire.service.RegisterServiceImpl"> 
     <property name="registerDAO" ref="registerDAO"></property> 
     <!-- <property name ="sessionFactory" ref = "sessionFactory"></property> --> 
     </bean> 
<bean id="registerDAO" class ="com.aspire.dao.RegisterDAOImpl"> 
     <property name ="sessionFactory" ref = "sessionFactory"></property> 
     </bean> 
</beans> 

구현 클래스 파일과 함께 RegisterService 인터페이스입니다.

public interface RegisterService { 
    public void checkRegister(String name,String email,Date dob,String address,String office,String serviceLine,String username,String passwd) throws SQLException,IOException, IllegalStateException, SystemException; 
} 


    @Service("registrationService") 
    public class RegisterServiceImpl implements RegisterService{ 

     @Autowired 
     private RegisterDAO register; 

     public RegisterServiceImpl(){ 
     } 

     public RegisterServiceImpl(RegisterDAO register){ 
      this.register = register; 
     } 

     public void checkRegister(String name, String email, Date dob, String address, String office, String serviceLine, 
       String username, String passwd) throws SQLException, IOException, IllegalStateException, SystemException { 
      System.out.println("In Service class...Check Register"); 
     register.checkRegister(name, email, dob, address, office, serviceLine, username, passwd); 
    } 
} 

그리고이 파일은 RegisterDAOImpl.java 파일입니다.

@Repository("registerDAO") 
public class RegisterDAOImpl implements RegisterDAO{ 

     @Resource(name="sessionFactory") 
     protected SessionFactory sessionFactory; 


     protected Session session; 

     public void setSessionFactory(SessionFactory sessionFactory) { 
       this.sessionFactory = sessionFactory; 
     } 

     public SessionFactory getSessionFactory(){ 
      return sessionFactory; 
     } 

     protected Session getSession(){ 
       return sessionFactory.openSession(); 
     } 


    public void checkRegister(String name, String email, Date dob, String address, String office, String serviceLine, 
      String username, String passwd) throws SQLException,IOException, IllegalStateException, SystemException 
    { 
     System.out.println("In Check Register"); 
     Integer emp_id = null; 
     try 
     { 
      session = getSession(); 
      /*String SQL_QUERY = "INSERT INTO employee(emp_id,name,dob,address,office,sline,username,password,email)"+ 
          "s"; 
      Query query = session.createQuery(SQL_QUERY); 
      int result = query.executeUpdate();*/ 
      org.hibernate.Transaction tx1=session.beginTransaction(); 
      Employee emp = new Employee(name,dob,address,office,serviceLine,username,passwd,email); 
      emp.setEmp_id(111); 
      emp.setAddress("Chennai"); 
      emp.setDob(dob); 
      emp.setEmail(email); 
      emp.setEmp_name("emp_name"); 
      emp.setEmp_pwd("emp_pwd"); 
      emp.setOffice_loc("office_loc"); 
      emp.setServiceLine(serviceLine); 
      emp.setUsername("username"); 
      emp_id = (Integer)session.save(emp); 
      System.out.println(emp_id); 
      tx1.commit(); 

     }catch(HibernateException e) 
     { 
      e.printStackTrace(); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
     finally 
     { 
      session.close(); 
     } 

    } 
} 

빈이 만들어 질 때 나타나는 오류 메시지입니다. 에 의해 발생 : org.springframework.beans.NotWritablePropertyException : bean 클래스 [com.aspire.service.RegisterServiceImpl]의 'registerDAO'속성이 올바르지 않습니다. 'registerDAO'속성에 쓰기가 가능하지 않거나 잘못된 설정 메소드가 있습니다. setter의 매개 변수 유형이 getter의 반환 유형과 일치합니까?

미리 감사드립니다. 문제 해결에 어려움이 있습니다.

+0

예외 메시지는 매우 분명합니다 ... 당신은'setRegisterDAO' 메소드를 가지고 있지 않습니다. 그런데 왜 그렇게 쓰는거야? 거기에 특수 효과가있는 이유는 무엇입니까? –

+0

RegisterDAO는 인터페이스입니다. 그래서 어떻게 setRegisterDAO 메서드를 구현할 수 수동 구성 부분에 정교한 수 있습니다. 나는 mvc annotations에 익숙하지 않고 배우려고 애 쓰고있다. – Adithya

+0

그 클래스의 구현에는 setter가 없다 ... 주석은 MVC와는 아무런 관련이 없다. Spring MVC와 관련이없는 단순한 스프링 주석이다. –

답변

0
<bean id ="registrationService" class = "com.aspire.service.RegisterServiceImpl"> 
<property name="registerDAO" ref="registerDAO"></property> 
<!-- <property name ="sessionFactory" ref = "sessionFactory"></property> --> 
</bean> 

이 세터 의존성 주입은, 당신은 당신의 클래스 RegisterServiceImpl의 setter 메소드가 있어야합니다. 그것은 오류가 말하는 것입니다.

은 다음과 같이 서비스 클래스에 메서드를 추가합니다 Deinum에 의해 말했듯이 당신이 registrationService & registerDAO에 대한 XML 구성 콩을 제거하고이 같은 component-scan을 사용할 수 있도록 이미 주석이

public void setRegisterDAO(RegisterDAO registerDAO) { 
    this.registerDAO = registerDAO; 
} 

:

<context:component-scan base-package="your-package" /> 

자세한 내용은 this example을 참조하십시오.

+0

정말 고마워요. 지금 내 실수를 이해합니다. 이것은 트릭을했다. – Adithya