一、各个包代表意思:
1、Dao层:主要是连接数据库的,BaseDao是数据库的基类
2、实现Dao层:也是连接数据库的,里面有个接口Dao,接口起到强制性的约束
3、entity层:一一对应数据库的字段
4、utils层:工具包
二、工厂者模式:
1、多态两种体现形式:1、作为返回值类型;2、作为方法的形参。
三、抽象工厂者模式:
1、之所以有这个是因为上面的方式可扩展性太差
2、步骤:
1、新建一个abstractFactory类,里面有一个方法:abstract Pet abstractFactory();
2、给每样宠物类定义另外一个继承了抽象工厂类的工厂类,返回自己对应的对象。
3、在测试类里抽象接口指向子类对象,然后抽象类对象.abstractFactory().play();,输出即可
四、反射:
1、就是在你的.java文件转换成.class文件后,对.class文件做手脚。
2、反射最常用的一种体现就是把热更新变成热修复,所有框架都用到反射。
3、特点:所有对象在我面前都是裸体。
4、所以我必须掌握.java文件如何转换成.class文件,然后反射是如何找到.class文件呢?
5、获得.class文件的三种方法:
1、对象.getClass();
2、通过反射得到:
1、类名.class;(开发中少用)
2、Class.forName(“包名.类名”);
6、获取构造方法:
1、得到所有构造方法(包括公有、私有),返回的是一个数组:
类变量.getDeclaredConstructors();
2、得到所有公有的构造方法:
类变量.getConstrustors();
3、得到一个公有的构造方法,并且使其被调用:
1、类变量.getConstrustor();
2、得到一个对象,利用构造方法的变量.newInstance()
3、输出这个对象即可。
4、得到一个私有的构造方法,并使其被调用:
1、类变量.getDeclaredConstructor(int.class);//这里如果调用有参方法就放对应参数即可
2、暴力反射,利用构造方法的变量.setAccessible(true);
3、得到一个对象,利用构造方法的变量.newInstance(12);//参数里放对应的具体值
4、输出这个对象即可。
7、获取属性:
1、得到所有属性:
类变量.getDeclaredFeilds();
2、得到所有公有属性:
类变量.getFeilds();
3、得到单个公有的属性:
1、类变量.getFeild("name");//参数放属性的名字
2、属性对象.set(对象,"");//第一个是你用反射得到的obj对象,第二个是你要赋的值
3、直接输出对象
8、获取方法:
1、得到所有方法:
类变量.getDeclaredMethods();
2、得到所有公有的方法:
类变量.getMethods();
3、得到单个公有的、无参的方法,并调用:
1、类变量.geMethod("方法名");
2、得到对象,通过类变量.getConstrustor().newInstance();
3、用方法变量.invoke(对象);
4、调用单个私有的、有参的方法,并调用:
1、类变量.getMethod("方法名",参数类型.class);
2、去掉权限 方法变量.setAccessible(true);
2、得到对象,类变量.getConstrustor().newInstance();
3、类变量.invoke(对象,"传入参数的值");
9、利用反射调用主方法:
1、得到Class类变量:
Class.froName("包名+类名");
2、得到Method对象:
类变量.geMethod("main","String[].class");
3、获得一个obj对象:
类变量.getConstrustor().newInstance();
4、Method对象.invoke(obj对象,"");???????????????????????????????????????????????/找代码看看
10、利用反射忽略泛型的定义:
1、确定泛型是String类型
2、得到list的.class文件:
list.getClass();
3、得到Method对象:
类变量.geMethod("add",Object.class);
4、接着就可以添加int类型的值了。
5、关键点:
1、必须使用forEach循环输出,而且类型该为Object。
11、利用反射得到指定动物的play方式
1、首先定义Dog、Cat类,都继承Pet这个父类,重写play方法
2、定义一个工厂类:返回一个对象,而返回那个对象依赖传入的value值
1、public Object getObject(String value){
//得到.class文件
Class cl12=Class.forName(value);
//得到一个对象
Object obj=cl12.getConstrustor().newInstance();
return obj;
}
3、在utils包里新建一个ConfigManager类,方法跟以前那个一模一样,就是获取属性文件里的值getValue(String key);