zoukankan      html  css  js  c++  java
  • 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的返回类型决定. 

  • 相关阅读:
    maven中net.sf.json报错的解决方法(转载)
    [PY3]——环境配置(1)——pyenv | pip | ipython | jupyter(含安装pyenv环境shell脚本)
    [LNMP]——LNMP环境配置
    Tomcat
    Amoeba+Mysql 实现读写分离
    LVS+keepalived DR模式配置高可用负载均衡集群
    [Mysql高可用]——双主互备+keepalived
    Mysql 日志管理
    Mysql基本操作总结
    [Mysql]——通过例子理解事务的4种隔离级别
  • 原文地址:https://www.cnblogs.com/kuailewangzi1212/p/2409102.html
Copyright © 2011-2022 走看看