(一)案例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; }
|