DbUtil ThreadLocal
为什么要使用ThreadLocal?
为了是一个请求只产生一个连接对象threadLocal.set(conn).tomcat连接池中有多个线程对象缓存使用过的线程id 和线程对象.key value键值对的形式保存.当第二个连接到达服务器时tomcat会分配之前空闲的线程给请求对象,如果之前线程的Threadlocal中的connection对象是close的状态会报连接已关闭异常.需要清空连接对象,这样二手线程会重新创建连接对象.
DaoFactory Dao工厂设计模式
service(){
EmpDao dao=new JDBCEmpDaoImpl()
EmpDao dao=new HibernateEmpDaoImpl()
dao.xx()
UserDao dao=new UserDaoImpl()
dao.xx();
}
改进,使用配置文件的做Dao和实现类的的映射,使用反射生成dao实例类以后若需要切换不同的实现(hibernate/jdbc....ect)只需要更改配置文件的对象关系.即可.
=============java内存模型=================
栈堆方法区:
.class文件运行在虚拟机,.class跨平台而jvm虚拟机本身不是跨平台.
jvm把所管理的内存分成三部分 栈,堆,方法区.
person p=new person();
先执行右边的创建对象,jvm首先去根据import.的包名加类名去加载该类.静态方法变量此时被分配内存.再执行new 通过类class对象 把该类创建到堆当中成员变量被初始化初值.
此时栈低分配了一个p变量记录对象的内存地址,普通的值在栈当中直接赋值,对象类型,第次new时去方法去检查Persion 类中有没有被加载.静态成员在方法区只有一份...加载器从src开始加载.
jconsole查看java虚拟机内存的管理情况.