java中屬性的類型


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  void  setJdbcTemplate(DataSource dataSource) {
         this .jdbcTemplate =  new  JdbcTemplate(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<Person> 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 void setJdbcTemplate(DataSource dataSource) {

         this .jdbcTemplate =  new  JdbcTemplate(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;
    
    
    
    
     public  Integer getAaa() {
         return  0;
    }
    
    
     public  void  setAaa(Integer aaa) {
         this .bbb = (String)aaa.toString();
    }

     private  JdbcTemplate jdbcTemplate;
    
     public  JdbcTemplate getJdbcTemplate() {
         return  this .jdbcTemplate ;
    }
    
    @Resource
     public  void  setJdbcTemplate(DataSource dataSource) {
         this .jdbcTemplate =  new  JdbcTemplate(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<Person> 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.測試輸出 

 注意紅色部分

 public Integer getAaa() {

         return  0;
    } 

publicvoid setAaa(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的返回類型決定. 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM