A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周发建 中级黑马   /  2016-3-29 10:26  /  268 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

(一)案例1-用属性的注解获取链接池
//用注解的方式注入配置
@Retention(RetentionPolicy.RUNTIME)
@interface Inject{
        String driverClass();
        String jdbcUrl();
        String user();
        String password();
}
class BookDao22{
        private ComboPooledDataSource ds;
       
        @Inject(driverClass="com.mysql.jdbc.Driver",jdbcUrl="",user="",password="")
        public void setDs(ComboPooledDataSource ds){
                this.ds = ds;
        }
}
class DaoFactory{
        BookDao22 dao = new BookDao22();
        //在返回这个Dao之前,需要注入一个 链接池
        public BookDao22 getBookDao(){
                //解析出Dao的所有属性
                try {
                        BeanInfo info = Introspector.getBeanInfo(dao.getClass(),Object.class);
                        PropertyDescriptor[] pds = info.getPropertyDescriptors();
                        for(int i=0;pds!=null&&i<pds.length;i++){
                                //得到Bean的每一个属性描述器
                                PropertyDescriptor pd = pds;
                                Method set = pd.getWriteMethod();  //得到相应属性的set方法
                               
                                Inject inject = set.getAnnotation(Inject.class);
                                if(inject == null){
                                        continue;
                                }
                                //方法上有指定的注解,则用注解配置的信息创建一个链接池
                                Class propertyType = pd.getPropertyType();
                                DataSource ds = (DataSource) createDataSourceByinject(inject, propertyType.newInstance());
                                set.invoke(dao, ds);
                        }
                } catch (Exception e) {
                        e.printStackTrace();
                }
               
                return dao;
        }



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马