org.springframework.beans.NotWritablePropertyException. Соответствует ли тип параметра установщика возвращаемому типу получателя?

Это bean-компонент, созданный в моем файле applicationContext.xml.

    <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: недопустимое свойство 'registerDAO' класса компонента [com.aspire.service.RegisterServiceImpl]: свойство компонента 'registerDAO' недоступно для записи или имеет недопустимый метод установки. Соответствует ли тип параметра установщика возвращаемому типу получателя?

Заранее спасибо. Трудно решить проблему.

1 ответ

Решение
<bean id ="registrationService" class = "com.aspire.service.RegisterServiceImpl">
<property name="registerDAO" ref="registerDAO"></property>
<!-- <property name ="sessionFactory" ref = "sessionFactory"></property> -->
</bean>

Это внедрение зависимости сеттера, в вашем классе должен быть метод сеттера RegisterServiceImpl, Вот что говорит ошибка.

Добавьте метод в свой класс обслуживания следующим образом:

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

Как сказал Deinum, у вас уже есть аннотации, поэтому вы можете удалить компоненты конфигурации xml для registrationService & registerDAO и использовать component-scan как это:

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

Обратитесь к этому примеру, чтобы узнать, как это сделать.

Другие вопросы по тегам