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" />
Обратитесь к этому примеру, чтобы узнать, как это сделать.