有哪些设计网站linux 网站搬家
- 作者: 五速梦信息网
- 时间: 2026年03月21日 06:54
当前位置: 首页 > news >正文
有哪些设计网站,linux 网站搬家,青浦徐泾网站建设,济南市公众号网站建设扩充#xff1a;贝叶斯定理答案见底。 设计模式对关于面向对象问题的具体解决方案#xff0e; 1#xff0c;单例多例 在设计单例模式时#xff0c;要注意两个点 1.构造方法要私有 2.成员变量要私有 3.创建对象所用的方法要被synchronized修饰.(因为方法体中会涉及到判断当… 扩充贝叶斯定理答案见底。 设计模式对关于面向对象问题的具体解决方案 1单例多例 在设计单例模式时要注意两个点 1.构造方法要私有 2.成员变量要私有 3.创建对象所用的方法要被synchronized修饰.(因为方法体中会涉及到判断当前成员对象是否为空在饿汉模式下会有多个线程来访问该方法为了防止判断访问结果同时为空从而创建多个对象就要被synchronized修饰) 2模版 所谓模板板式就是在父类中定义算法的主要流程而把一些个性化的步骤延迟到子类中去实现父类始终控制着整个流程的主动权子类只是辅助父类实现某些可定制的步骤 父类 public abstract class FatherClass {//人生public final void 人生(){学习();工作();爱情();}//学习public void 学习(){System.out.println(放学回家学到晚上12点不许睡觉);}//工作public void 工作(){System.out.println(稳定就好);}//爱情(放飞自我)public abstract void 爱情();}继承父类的类 package com.apesource.test; //儿子 public class SonClass extends FatherClass{Overridepublic void 学习() {System.out.println(开心就好及格万岁);}Overridepublic void 爱情() {System.out.println(肤白貌美大长腿…..);} }如果该方法被重写那么结果是子类的内容。反之则是父类的内容 Spring中jdbcTemplate、hibernateTemplate等以Template结尾的 对数据库操作的类它们就使用到模板模式。一般情况下我们都是使用继承的方式来实现模板模式但是Spring并没有使用这种方式而是使用Callback模式与模板方法配合既达到了代码复用的效果同时增加了灵活性。 3工厂 一个工厂可以根据传入参数的不同而创建出来不同的对象。 4代理静态代理动态代理 功能 1.中介隔离作用 2.方法增强 一.静态代理静态代理中代理在代码执行前已经被创建出来了。 动态代理是代码执行的时候被创建出来的 1.基于接口jdk自带2.基于子类第三方 import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.InvocationHandler;子类 public class Test03 {public static void main(String[] args) {//1.创建被代理对象ISinger teng new TengEr();//2.创建代理对象ISinger jinJiRen (ISinger)Enhancer.create(teng.getClass(), new InvocationHandler() {Overridepublic Object invoke(Object o, Method method, Object[] objects) throws Throwable {Object obj method.invoke(teng,objects);return obj;}});//3.使用jinJiRen.sing();} }import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class Test02 {public static void main(String[] args) {//1.被代理对象ISinger zhouJieLun new ZhouJieLun();/*** 2.创建代理对象* ClassLoader loader被代理对象的类的加载器* Class?[] interfaces,被代理对象的类的字节数组* InvocationHandler h处理器对象* /ISinger jinJiRen (ISinger) Proxy.newProxyInstance(zhouJieLun.getClass().getClassLoader(), zhouJieLun.getClass().getInterfaces(), new InvocationHandler() {/** Object proxy, 被代理对象的引用* Method method,被代理对象类中的所有方法* Object[] args 被代理对象类中的所有方法的参数* Object 被代理对象类中的所有方法的返回值** /Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//方法增强System.out.println(挑一个舞打个球~~~);Object obj method.invoke(zhouJieLun,args);//执行周杰伦唱歌方法,(执行被代理对象中的所有方法)return obj;}});//3.消费使用jinJiRen.sing();} }事务管理 1在转账服务时更新数据库时可能会发生异常就会导致金额不对 解决方法1.被调用到的dao层语句都拿着同一个对象这个对象可以实现锁的功能。那么就要在dao层query和update语句中增加一个Connection对象。threadLocal可以充当sql语句的锁对象 因为threadlocal有一个线程们的公共区域完全可以实现当公共区有一个connection的时候线程们完全不需要再考虑在去造很多connection。 ThreadLocal叫做线程变量意思是ThreadLocal中填充的变量属于当前线程该变量对其他线程而言是隔离的也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本那么每个线程可以访问自己内部的副本变量。 2.service层中调用事务管理当异常发生时实现事务的回滚 ①在dao层用到的连接工具类 package com.apesource.util;import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException;/** author * version 1.0* since 2023/9/15/ public class ConnectionUtil {//1.线程区域对象ThreadLocalConnection threadLocal new ThreadLocalConnection();//2.数据源private DataSource dataSource;public void setDataSource(DataSource dataSource) {this.dataSource dataSource;}Connection connection null;//获取连接public Connection createConn(){try {//1.线程区域connection threadLocal.get();//2.判断if (connection null){//创建连接connection dataSource.getConnection();//保存threadLocal.set(connection);}return connection;} catch (SQLException throwables) {throwables.printStackTrace();}return null;}//关闭连接public void closeConn(){threadLocal.remove();//解除绑定} }在dao层的每一个语句都装配工具类 //装配连接工具类 ConnectionUtil connectionUtil; public void setConnectionUtil(ConnectionUtil connectionUtil) { this.connectionUtil connectionUtil; } Override public void save(Student student) { try { queryRunner.update(connectionUtil.createConn(),insert into student(sname,shobby,smoney) value(?,?,?),student.getSname(),student.getShobby(),student.getSmoney()); } catch (SQLException throwables) { throwables.printStackTrace(); } } ②在service层用到的事务管理工具类 package com.apesource.util;import java.sql.SQLException;/** author * version 1.0* since 2023/9/15/ public class TransactionUtil {//装配连接工具类ConnectionUtil connectionUtil;public void setConnectionUtil(ConnectionUtil connectionUtil) {this.connectionUtil connectionUtil;}//开启事务public void beginTransaction(){try {connectionUtil.createConn().setAutoCommit(false);} catch (SQLException throwables) {throwables.printStackTrace();}}//提交事务public void commitTransaction(){try {connectionUtil.createConn().commit();} catch (SQLException throwables) {throwables.printStackTrace();}}//回滚事务public void rollbackTransaction(){try {connectionUtil.createConn().rollback();} catch (SQLException throwables) {throwables.printStackTrace();}}//关闭事务public void closeTransaction(){try {connectionUtil.createConn().close();//关闭连接connectionUtil.closeConn();//解除绑定} catch (SQLException throwables) {throwables.printStackTrace();}} }service里的用到的事务管理 Overridepublic void transfer(String sourceName, String targetName, int money) {try {//开启事务transactionUtil.beginTransaction();//1.查询用户信息Student sourceStudent dao.findByName(sourceName);Student targetStudent dao.findByName(targetName);//2.java代码中实现转账sourceStudent.setSmoney(sourceStudent.getSmoney()-money);targetStudent.setSmoney(targetStudent.getSmoney()money);//3.修改数据库dao.update(sourceStudent);int a 10⁄0;//模拟异常dao.update(targetStudent);//提交事务transactionUtil.commitTransaction();} catch (Exception e) {e.printStackTrace();//回滚事务transactionUtil.rollbackTransaction();}finally {//关闭事务transactionUtil.closeTransaction();}} 优化方法 优化方法 采用Beanfactory创建代理对象代理对象可以用来方法增强可以将被代理对象的方法不经过污染就可以实现事务管理。 在这个案例中,controller是消费者 !–注入被代理service– bean idserviceImp classcom.apesource.service.StudentServiceImp property namedao refdaoImp/property /bean !–注入代理service– bean idproxySerivce classcom.apesource.service.StudentServiceImp factory-beanfactory factory-methodcreateProxy/bean bean idfactory classcom.apesource.factory.BeansFactory property nametransactionUtil reftransactionUtil/property property nametoProxyService refserviceImp/property /bean !–注入controller– bean idcontrollerImp classcom.apesource.controller.StudentControllerImp property namestudentService refproxySerivce/property /bean 抽取方法用到了代理对象 BeansFactory代码如下 package com.apesource.factory;import com.apesource.service.IStudentService; import com.apesource.util.TransactionUtil;import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Proxy;/** author * version 1.0* since 2023/9/15*/ public class BeansFactory {//装配被代理业务对象IStudentService toProxyService;public void setToProxyService(IStudentService toProxyService) {this.toProxyService toProxyService;}//装配事务工具类TransactionUtil transactionUtil;public void setTransactionUtil(TransactionUtil transactionUtil) {this.transactionUtil transactionUtil;}//创建代理对象public IStudentService createProxy(){return (IStudentService)Proxy.newProxyInstance(toProxyService.getClass().getClassLoader(), toProxyService.getClass().getInterfaces(), new InvocationHandler() {Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {Object obj null;//主业务方法try {transactionUtil.beginTransaction();obj method.invoke(toProxyService,args);transactionUtil.commitTransaction();} catch (Exception e) {e.printStackTrace();transactionUtil.rollbackTransaction();} finally {transactionUtil.closeTransaction();}return obj;}});} }八年后的重逢贝叶斯定理是一则随机事件的条件概率(或边缘概率)的定理其中P(A|B)是在B发生的情况下A发生的可能性。也就是说如果你喜欢他那么他就会喜欢你。如果你对他好他也会对你好的。因此如果你表白你需要相信他将全部的情感完全吐露给对方将真诚当成一生的信念投入到爱情中去充实彼此的关系全心全意地去经营彼此的关系将相互接纳、宽容、体谅和支持当作最可贵的宝贵财富。
- 上一篇: 有哪些可以在网上做兼职的网站开建筑公司需要什么条件
- 下一篇: 有哪些是外国人做的网站关闭小程序api
相关文章
-
有哪些可以在网上做兼职的网站开建筑公司需要什么条件
有哪些可以在网上做兼职的网站开建筑公司需要什么条件
- 技术栈
- 2026年03月21日
-
有哪些建设网站公司台州千寻网站建设公司
有哪些建设网站公司台州千寻网站建设公司
- 技术栈
- 2026年03月21日
-
有哪些建设网站公司国外酷网站
有哪些建设网站公司国外酷网站
- 技术栈
- 2026年03月21日
-
有哪些是外国人做的网站关闭小程序api
有哪些是外国人做的网站关闭小程序api
- 技术栈
- 2026年03月21日
-
有哪些是做二手的网站郴州网站定制
有哪些是做二手的网站郴州网站定制
- 技术栈
- 2026年03月21日
-
有哪些网站建设工作室新品推广计划与方案
有哪些网站建设工作室新品推广计划与方案
- 技术栈
- 2026年03月21日
