1.看代码,下面是一个类
下面主要红色字体部分的属性
package com.westsoft.serviceimpl;
import java.util.List;
import javax.annotation.Resource;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.westsoft.bean.Person;
import com.westsoft.dao.PersonDao;
import com.westsoft.service.PersonService;
@Service @Transactional
public class PersonServiceBean implements PersonService {
private JdbcTemplate jdbcTemplate;
@Resource
public voidsetJdbcTemplate(DataSource dataSource) {
this.jdbcTemplate =newJdbcTemplate(dataSource);
}
@Resource
private PersonDao personDao;
/*public PersonDao getPersonDao() {
return personDao;
}
public void setPersonDao(PersonDao personDao) {
this.personDao = personDao;
}*/
@Override
public void delete(Integer id) {
//TODO Auto-generated method stub
}
@Override
public Person getPerson(Integer id) {
//TODO Auto-generated method stub return null;
}
@Override @Transactional(propagation=Propagation.NOT_SUPPORTED)
public List getPersons() {
//TODO Auto-generated method stub return null;
}
/** 新增
* @Transactional(rollbackFor=Exception.class)
* RuntimeException运行期例外,默认回滚
* Exception 非运行期例外,不回滚
* @Transactional(rollbackFor=Exception.class)
* @Transactional(propagation=Propagation.NOT_SUPPORTED):不开启事务
* @Transactional(propagation=Propagation.REQUIRED):默认事务行为,如果方法运行时已经处在一个事务中,则加入该事务,
* 否则为自己创建一个事务
* @Transactional(propagation=Propagation.REQUIREDNEW):必须开启一个新事务,事务中嵌套事务
* @Transactional(propagation=Propagation.SUPPORTS):如果方法在已存在的事务中执行,则加入该事务,如果不在事务中执行,
* 则方法在没有事务的环境下执行.
* @Transactional(propagation=Propagation.MANDATORY):指定方法只能在已有的事务中执行,不会自动创建事务,如果没有在事务
* 中执行,则抛出异常.
* @Transactional(propagation=Propagation.NEVER):不能在事务中执行,否则抛出异常
*
* @Transactional(propagation=Propagation.NESTED):
**/
@Override @Transactional(propagation=Propagation.REQUIRED)
public void save(String name) throws Exception {
//TODO Auto-generated method stub
this.jdbcTemplate.update("insert into person(name) values(?)", new Object[]{name},
new int[]{java.sql.Types.VARCHAR});
//throw new RuntimeException("运行期例外");
}
@Override
public void update(Person person) {
//TODO Auto-generated method stub
}
}
public voidsetJdbcTemplate(DataSource dataSource) {
this.jdbcTemplate =newJdbcTemplate(dataSource);}
2.单元测试代码
PropertyDescriptor[] ps = Introspector.getBeanInfo(PersonServiceBean.class).getPropertyDescriptors();
for(PropertyDescriptor properdesc : ps){
System.out.println(properdesc.getName()+":"+properdesc.getPropertyType());
}
3.测试输出
class:class java.lang.Class
jdbcTemplate:interface javax.sql.DataSource
persons:interface java.util.List
根据输出的内容可以判断出属性的名称是jdbcTemplate,属性的数类型是javax.sql.DataSource
由此可见类的属性的类型并不是由属性所关联的字段的类型决定的,而是由传入的参数的类型决定的
4.如果有getAaa则属性的类型由getAaa的返回值决定,如下代码
package com.westsoft.serviceimpl;
import java.util.List;
import javax.annotation.Resource;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.westsoft.bean.Person;
import com.westsoft.dao.PersonDao;
import com.westsoft.service.PersonService;
@Service @Transactional
public class PersonServiceBean implements PersonService {
private String bbb;
publicInteger getAaa() {
return0;
}
public voidsetAaa(Integer aaa) {
this.bbb = (String)aaa.toString();
}
privateJdbcTemplate jdbcTemplate;
publicJdbcTemplate getJdbcTemplate() {
return this.jdbcTemplate ;
}
@Resource
public voidsetJdbcTemplate(DataSource dataSource) {
this.jdbcTemplate =newJdbcTemplate(dataSource);
}
@Resource
private PersonDao personDao;
/*public PersonDao getPersonDao() {
return personDao;
}
public void setPersonDao(PersonDao personDao) {
this.personDao = personDao;
}*/
@Override
public void delete(Integer id) {
//TODO Auto-generated method stub
}
@Override
public Person getPerson(Integer id) {
//TODO Auto-generated method stub return null;
}
@Override @Transactional(propagation=Propagation.NOT_SUPPORTED)
public List getPersons() {
//TODO Auto-generated method stub return null;
}
/** 新增
* @Transactional(rollbackFor=Exception.class)
* RuntimeException运行期例外,默认回滚
* Exception 非运行期例外,不回滚
* @Transactional(rollbackFor=Exception.class)
* @Transactional(propagation=Propagation.NOT_SUPPORTED):不开启事务
* @Transactional(propagation=Propagation.REQUIRED):默认事务行为,如果方法运行时已经处在一个事务中,则加入该事务,
* 否则为自己创建一个事务
* @Transactional(propagation=Propagation.REQUIREDNEW):必须开启一个新事务,事务中嵌套事务
* @Transactional(propagation=Propagation.SUPPORTS):如果方法在已存在的事务中执行,则加入该事务,如果不在事务中执行,
* 则方法在没有事务的环境下执行.
* @Transactional(propagation=Propagation.MANDATORY):指定方法只能在已有的事务中执行,不会自动创建事务,如果没有在事务
* 中执行,则抛出异常.
* @Transactional(propagation=Propagation.NEVER):不能在事务中执行,否则抛出异常
*
* @Transactional(propagation=Propagation.NESTED):
**/
@Override @Transactional(propagation=Propagation.REQUIRED)
public void save(String name) throws Exception {
//TODO Auto-generated method stub
this.jdbcTemplate.update("insert into person(name) values(?)", new Object[]{name},
new int[]{java.sql.Types.VARCHAR});
//throw new RuntimeException("运行期例外");
}
@Override
public void update(Person person) {
//TODO Auto-generated method stub
}
}
5.测试输出
注意红色部分
publicInteger getAaa() {
return0;}
publicvoidsetAaa(Integer aaa) {this.bbb = (String)aaa.toString();}
通过反射测试出属性的数据类型为
aaa:class java.lang.Integer
class:class java.lang.Class
jdbcTemplate:class org.springframework.jdbc.core.JdbcTemplate
persons:interface java.util.List
6.总结
在没有getAaa的情况下,属性的数据类型是有setAaa的传入参数决定,如果有getAaa则属性的数据类型有getAaa的返回类型决定.