`
lindongxiao
  • 浏览: 47749 次
  • 性别: Icon_minigender_1
  • 来自: 泉州
社区版块
存档分类
最新评论

想不通为什么这里构造注入正常,set注入就出错

阅读更多
下面是配制文件
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>

	<bean id="dataSource"
		class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName"
			value="com.mysql.jdbc.Driver">
		</property>
		<property name="url" value="jdbc:mysql://localhost:3306/test"></property>
		<property name="username" value="root"></property>
		<property name="password" value="agsfd"></property>
	</bean>

	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
		<property name="mappingResources">
			<value>hibernate/A.hbm.xml</value>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">
					org.hibernate.dialect.MySQLDialect
				</prop>
			</props>
		</property>

	</bean>

	<!-- 
	-->
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
	<bean id="transactionTemplate"
		class="org.springframework.transaction.support.TransactionTemplate">
		<property name="transactionManager">
			<ref bean="transactionManager" />
		</property>
	</bean>
	<bean id="hibernateTemplate"
		class="org.springframework.orm.hibernate3.HibernateTemplate">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>

	<bean id="iTestDao" class="test.TestDao">
		<property name="hibernateTemplate">
			<ref bean="hibernateTemplate" />
		</property>
	</bean>
	<bean id="programmaticManager" class="test.ProgrammaticManager">
	  <constructor-arg>
	   <ref bean="iTestDao"/>
	   </constructor-arg>
		<property name="transactionManager">
			<ref bean="transactionManager" />
		</property>
	</bean>
	<!-- 
	   <property name="iTestDao">
	   <ref bean="iTestDao"/></property>
	-->

</beans>

下面是ProgrammaticManager类,就是这个类iTestDao ,set注入出现在异常,构造注入就正常
package test;

import hibernate.A;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;

public class ProgrammaticManager {
	private ITestDao iTestDao;
	private PlatformTransactionManager transactionManager;
	public ProgrammaticManager() {
		// TODO 自动生成构造函数存根
	}
	public ProgrammaticManager(ITestDao it) {
		this.iTestDao=it;
	}
	public PlatformTransactionManager getTransactionManager() {
		return transactionManager;
	}
	
	public void setTransactionManager(PlatformTransactionManager transactionManager) {
		this.transactionManager = transactionManager;
	}
	
	public ITestDao getITestDao() {
		return iTestDao;
	}
	
	public void setITestDao(ITestDao iTestDao) {
		this.iTestDao=iTestDao;
	}
	private TransactionDefinition getDefinition(int isolationLevel) {
        DefaultTransactionDefinition def = new DefaultTransactionDefinition(
            TransactionDefinition.PROPAGATION_REQUIRED);
        def.setIsolationLevel(isolationLevel);
        
        return def;
    }
	 public void insert() {
	        TransactionStatus status = transactionManager.getTransaction(
	            getDefinition(TransactionDefinition.ISOLATION_READ_COMMITTED));
	        try {
//	        	ApplicationContext acx = new ClassPathXmlApplicationContext(
//	    		"file:src/applicationContext.xml");
//	    		iTestDao = (ITestDao) acx.getBean("iTestDao");
	            A ab = new A(new Integer(185),"c++");
	            A abc = new A(new Integer(192),"java");
	            iTestDao.insert(ab);
	            iTestDao.insert(abc);
	            transactionManager.commit(status);
	        } catch (Throwable t) {
	            transactionManager.rollback(status);
	        }
	    
	    }

}


下面是异常信息
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'programmaticManager' defined in URL [file:src/applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'iTestDao' of bean class [test.ProgrammaticManager]: Bean property 'iTestDao' is not writable or has an invalid setter method. Did you mean 'ITestDao'?
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1133)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:865)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:404)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:255)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:252)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:287)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:689)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:358)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:91)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:75)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:65)
	at test.Test.main(Test.java:9)
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'iTestDao' of bean class [test.ProgrammaticManager]: Bean property 'iTestDao' is not writable or has an invalid setter method. Did you mean 'ITestDao'?
	at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:793)
	at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:645)
	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:1130)
	... 13 more

分享到:
评论
13 楼 抛出异常的爱 2007-07-24  
popi 写道
那年夏天 写道
抛出异常的爱 写道
spring默认命名方式不能以双大写字母开头。。。。

命名不规范导致的一些莫名其妙的错误,在其他开源框架里也很多的。。


因为好奇,简单验证了一下,好像不是这样。
双大写字母开头是可以的。
对: name, NAme,
错: Name, nAme

另外,“spring默认命名方式”,在文档的什么地方可以查到?

把首字母大写之后前面加上set成为
setXxxxx的型式。
当你的文字是这个样子时 xXxxxx
serXXxxxxx会出错。
对于中国人来说是个bug
但是在英文国家中大约就没人会这么写了吧。。。。
12 楼 bracling 2007-07-24  
<property name="iTestDao"> 
    <ref bean="iTestDao"/>
</property> 
这段代码放在具体哪个位置的?
11 楼 popi 2007-07-24  
那年夏天 写道
抛出异常的爱 写道
spring默认命名方式不能以双大写字母开头。。。。

命名不规范导致的一些莫名其妙的错误,在其他开源框架里也很多的。。


因为好奇,简单验证了一下,好像不是这样。
双大写字母开头是可以的。
对: name, NAme,
错: Name, nAme

另外,“spring默认命名方式”,在文档的什么地方可以查到?
10 楼 那年夏天 2007-07-24  
抛出异常的爱 写道
spring默认命名方式不能以双大写字母开头。。。。

命名不规范导致的一些莫名其妙的错误,在其他开源框架里也很多的。。
9 楼 jiwenke 2007-07-24  
在依赖注入的时候的问题,把属性名改成全部小写试一下?
8 楼 抛出异常的爱 2007-07-20  
spring默认命名方式不能以双大写字母开头。。。。
7 楼 sungaofei 2007-07-20  
据本人所知,第一个字母是小写,而第二个字母是大写的属性,它的get和set方法名字不是get+属性第一个字母大写。例如iTestDao的set方法不是setITestDao,可能是setItestDao。所以不建议使用第一个字母是小写,而第二个字母是大写的属性。
6 楼 lindongxiao 2007-07-20  
tom.duan 写道
test.TestDao是接口吧,<bean id="iTestDao" class="test.TestDao">,这里为什么不用接口实现呢?

另外iXXXDao感觉怪怪的,直接XXXDao不就好了?

TestDao就是实现ITestDao接口
5 楼 lindongxiao 2007-07-20  
把iTestDao全改成testDao就解决
4 楼 tom.duan 2007-07-20  
test.TestDao是接口吧,<bean id="iTestDao" class="test.TestDao">,这里为什么不用接口实现呢?

另外iXXXDao感觉怪怪的,直接XXXDao就好了?
3 楼 lindongxiao 2007-07-20  
bluepopopo 写道
提示"invalid setter method" 要么属性名有问题要么set的类型不匹配

构造注入就没问题,属性名和类型都是一样的
2 楼 bluepopopo 2007-07-20  
提示"invalid setter method" 要么属性名有问题要么set的类型不匹配
1 楼 lindongxiao 2007-07-20  
试过spring 2.0 和2.1 m2

相关推荐

    asp防注入代码 asp防注入代码

    '如果单一使用穷举 Form 对象的操作就会出错 '所以要把这些页面过滤出来,同时在页面中使用 sql("检测的字串")才行 '垃圾猪 zero@new57.com 'http://blog.csdn.net/cfaq '将本页用 include 方法放在头部以让所有页都...

    Sql_set.zip_MYSQL

    2. **参数化查询**:为了避免SQL注入攻击,`Sql_set`可能支持预编译的参数化SQL语句。例如,使用PreparedStatement,将用户输入转化为占位符,如`"SELECT * FROM Users WHERE username = ? AND password = ?"`,然后...

    第16天:WEB漏洞-SQL注入之查询方式及报错盲注1

    这里的`$id`是用户输入,如果不经验证,就可能导致SQL注入。 2. **INSERT查询**:用于向数据库中插入新记录,如`insert into news(id,url,text) values(2,'x','$t')`。`$t`代表用户提供的文本,需确保其安全性。 3. ...

    Spring企业开发

    #### 四、为什么使用Spring 引入Spring框架可以为项目带来以下几个方面的好处: 1. **降低组件之间的耦合度**:通过使用IoC和DI,组件间的依赖关系变得更为松散,有利于系统的扩展和维护。 2. **使用容器提供的...

    spring的有关学习知识总结

    同时,Spring支持通过构造函数和set方法两种方式来注入依赖。 9. **自动赋值**:Spring提供了自动装配机制,如byname、byType、constructor和autodetect,可以根据属性名、类型或构造函数匹配来自动找到并设置依赖...

    MyBatis动态SQL是一项强大的特性,它允许我们在编写SQL语句时根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的

    在这里,即使`username`和`email`都为`null`,由于使用了`&lt;set&gt;`元素,最终生成的SQL语句也不会有多余的逗号。 ### 动态SQL的安全性 尽管MyBatis动态SQL提供了一种强大而灵活的方式来构造SQL语句,但它也存在一定...

    MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据

    则通过一系列内置的标签(如`&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;`、`&lt;trim&gt;`、`&lt;where&gt;`、`&lt;set&gt;`等)实现了对SQL语句的灵活控制,并将这些标签置于XML映射文件中进行定义,这样就极大地简化了SQL语句的构造...

    mybatis-plus QueryWrapper条件查询器

    这里,LambdaQueryWrapper通过方法引用来设置条件,使得代码更易读且降低了出错的可能性。 总的来说,MyBatis-Plus的QueryWrapper是Spring Boot中进行数据操作的强大工具,它简化了SQL语句的编写,提高了开发效率。...

    java reflection反射机制示例

    - **框架设计**:Spring框架就大量使用反射来实现依赖注入和AOP(面向切面编程)。 - **序列化/反序列化**:如`java.io.ObjectInputStream`和`java.io.ObjectOutputStream`利用反射恢复对象状态。 - **单元测试**:...

    PHP的十个高级技巧(TXT)

    9. **依赖注入**:通过构造函数或属性注入,使得组件之间解耦,便于测试和维护。 10. ** Traits **:解决单继承限制,允许代码重用,提高代码的灵活性。 以上只是基于一般经验的推测,实际的“PHP的十个高级技巧”...

    PHP数据库操作类.pdf

    - 最后,设置字符编码以确保数据的正确读写,这里使用`SET NAMES`语句。 4. **SQL查询执行**: - `query()`方法是核心功能,它接收SQL语句作为参数,执行查询并返回结果资源。 - 如果SQL语句为空,会抛出错误。 ...

    java学习——java中的反射学习笔记.rar_java 反射

    使用`getFields()`获取公共字段,`getDeclaredFields()`获取所有字段,然后通过`set()`和`get()`方法操作字段。 2. 访问方法:`Method`类代表类的方法。`getMethods()`获取公共方法,`getDeclaredMethods()`获取...

Global site tag (gtag.js) - Google Analytics