org.springframework.beans.NotWritablePropertyException:bean类的属性'interceptorNames'无效

时间:2014-06-13 10:16:14

标签: spring hibernate

我有这个错误。我想使用Spring在Hibernate中构建一个事务。但我总是有这种错误。它无法构建扩展bean“Proxy”的bean person服务。 “Proxy”构造一个调用事务管理器和拦截器的事务。


Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'Proxy' defined in class path resource [com/borzacchiello/user/springldap/springldapVersioneSeconda.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'interceptorNames' of bean class [org.springframework.transaction.interceptor.TransactionProxyFactoryBean]: Bean property 'interceptorNames' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1279)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:423)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:100)
        ... 21 more
    Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'interceptorNames' of bean class [org.springframework.transaction.interceptor.TransactionProxyFactoryBean]: Bean property 'interceptorNames' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
        at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:801)
        at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:651)
        at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:78)
        at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:59)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1276)

我的xml文件是:

1)

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">



<bean id="transactionManager" 
class="org.springframework.orm.hibernate3.HibernateTransactionManager">                                                                                         
     <property name="dataSource" ref="dataSource" />        
     <property name="sessionFactory" ref="sessionFactory" />
 </bean> 

 <bean id="Proxy"
 class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">            
      <property name="interceptorNames">
          <list>
              <value>transactionInterceptor</value>
          </list>
       </property>      
 </bean> 

<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
    <property name="transactionManager" ref="transactionManager" /> 
    <property name="transactionAttributes">
        <props>
            <prop key="save">PROPAGATION_REQUIRES_NEW</prop>
        <prop key="getValorePerCodice">PROPAGATION_REQUIRES_NEW,readOnly</prop>
        </props>
     </property>    
 </bean>

 <bean id="ldapService" parent="Proxy"
 class="com.borzacchiello.login.ldap.service.LdapService">
     <property name="contactDAO">
         <ref bean="contactDAO"/>
     </property>
 </bean>

 <bean id="contactDAO" class="com.borzacchiello.login.ldap.DAO.LDAPContactDAO" >
     <property name="sessionFactory" ref="sessionFactory" />        
 </bean>

 <bean id="personService" parent="Proxy"
 class="com.borzacchiello.service.impl.PersonServiceImpl" >          
     <property name="personDao" ref="personDao" />
     <property name="stockService" ref="stockService" />
 </bean>

 <bean id="personDao" class="com.borzacchiello.dao.impl.PersonDaoImpl" >
     <property name="sessionFactory" ref="sessionFactory"></property>
 </bean>

 <bean id="stockService" class="com.borzacchiello.service.impl.StockServiceImpl" >
     <property name="stockDao" ref="stockDao" />
 </bean>         

 <bean id="stockDao" class="com.borzacchiello.dao.impl.StockDaoImpl" >
     <property name="sessionFactory" ref="sessionFactory"></property>
 </bean>        

 </beans>

    2)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<!-- Hibernate session factory -->
<bean id="sessionFactory" 
     class="org.springframework.orm.hibernate3.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>
         <prop key="hibernate.current_session_context_class">thread</prop> 
       </props>
    </property>

    <property name="mappingResources">
    <list>
          <value>com/borzacchiello/hibernate/hbm/Customer.hbm.xml</value>
          <value>com/borzacchiello/hibernate/hbm/Configurazione.hbm.xml</value>
          <value>com/borzacchiello/hibernate/hbm/Person.hbm.xml</value>
          <value>com/borzacchiello/hibernate/hbm/Stock.hbm.xml</value>
    </list>
    </property> 

</bean>

</beans>

3)

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<bean 
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>classpath:/config/database/properties/database.properties</value>
    </property>
</bean>

<bean id="dataSource" 
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
 </bean>

</beans>

    This is my main :

public static void main(String[] args) {

    Person person = new Person();
person.setId(5);
person.setName("name1");
person.setSurname("name2");
person.setAddress("address");               
PersonService personService =(PersonService)LocalContext.getBean("personService");
personService.save(person, "LVerde");

}

    These are my java classes:

    1)

import org.hibernate.exception.ConstraintViolationException;    
import com.borzacchiello.service.PersonService;
import com.borzacchiello.service.StockService;
import com.borzacchiello.dao.PersonDao;
import com.borzacchiello.model.Person;
import com.borzacchiello.model.Stock;

public class PersonServiceImpl implements PersonService{

    PersonDao personDao;
    StockService stockService;


    public PersonDao getPersonDao() {
        return personDao;
    }

    public void setPersonDao(PersonDao personDao) {
        this.personDao = personDao;
    }



    public StockService getStockService() {
        return stockService;
    }

    public void setStockService(StockService stockService) {
        this.stockService = stockService;
    }

    public void save(Person person, String stock_code){

        try {
            personDao.save(person);
        System.out.println("Person Inserted");
        Stock stock = new Stock();
        stock.setStock_id(person.getId());
        stock.setStock_code(stock_code);
        stock.setStock_name("Legno Verde");
        boolean bool = stockService.getByName(stock.getStock_name());
        if(!bool)
        {
            stockService.save(stock);
            System.out.println("stock Inserted");
        }
        else
        {

        }
        } catch (ConstraintViolationException e) {

        }

    }

}

2)

public class PersonDaoImpl extends HibernateDaoSupport implements PersonDao{

    public void save(Person person){

        getHibernateTemplate().save(person);
    }

}

3)

public class StockServiceImpl implements StockService{

    StockDao stockDao;

    public void setStockDao(StockDao stockDao) {
        this.stockDao = stockDao;
    }

    public void save(Stock stock){
        stockDao.save(stock);
    }

    @Override
    public boolean getByName(String string) {
        return stockDao.getByName(string);      
    }

}

    4)

public class StockDaoImpl extends HibernateDaoSupport implements StockDao{

    public void save(Stock stock){
        getHibernateTemplate().save(stock);
    }

    //colonne e tabelle devo avere lo stesso nome della classe e dei campi
    @Override
    public boolean getByName(String nome) {
        List<Object> lista=getHibernateTemplate().find("select stock_name from Stock");
        boolean bool= (lista.size()>0)?true : false;
        return bool;
    }

}

有人能告诉我哪里犯了错误吗?我希望一切都清楚。

1 个答案:

答案 0 :(得分:0)

班级org.springframework.transaction.interceptor.TransactionProxyFactoryBean没有属性interceptorNames