反射-class.newInstance() 被弃用
1. class.newInstance()使用
1.1. 调用无参构造方法
//通过反射生成:AccountServiceImpl对象 public IAccountService getInstance(){ AccountServiceImpl accountService = null; try{ accountService = (AccountServiceImpl)Class.forName("com.itlearn.service.impl.AccountServiceImpl").newInstance(); }catch (Exception ex ){ ex.printStackTrace(); } return accountService; }
注:class.newInstance() 会直接调用该类的无参构造函数进行实例化
1.2. 调用有参构造方法
//通过反射生成:AccountServiceImpl对象 public IAccountService getInstence(){ AccountServiceImpl accountService = null; try{ accountService = (AccountServiceImpl)Class.forName("com.itlearn.service.impl.AccountServiceImpl").getConstructor(String.class,Integer.class).newInstance("heihei",12); }catch (Exception ex ){ ex.printStackTrace(); } return accountService; }
注:getConstructor()会获得对于有参构造器,进行传入字节码。
2. class.newInstance()替代者
2.1. class.getDeclaredConstructor().newInstance()
//通过反射生成:AccountServiceImpl对象 public IAccountService getInstence(){ AccountServiceImpl accountService = null; try{ accountService = AccountServiceImpl.class.getDeclaredConstructor(String.class,Integer.class).newInstance("heihei",12); }catch (Exception ex ){ ex.printStackTrace(); } return accountService; }
注:getDeclaredConstructor()方法会根据他的参数对该类的构造函数进行搜索并返回对应的构造函数,没有参数就返回该类的无参构造函数,然后再通过newInstance进行实例化。