一、前言 本文仅代表作者的个人观点; 本文的内容仅限于技术探讨,不能作为指导生产环境的素材; 本文素材是红帽公司产品技术和手册; 本文分为上篇和下篇两部分,本文是下篇; 二、一个飞机购票程序源码解析...我们查看这个kjar的三个源码文件,这其实是三个数据对象: 第一个:Applicant.java,这个代码主要是获取买票申请人的个人信息: 先看外部结构: ?.... */ public class Applicant implements java.io.Serializable { static final long serialVersionUID...: 第二个:BookingObject.java,这个主要是预定的对象: ?...查看数据对象: ? 再看business流程: 选择org.specialtripsagency package. ? 接下来看一下流程建模,本流程是审核机票预订流程的定义。 ?
多对一:(街道→区县) * TBLJd.java 类* public class TblJd implements java.io.Serializable { // Fields... java.lang.String...one-to-many : 表明 tblFwxxes 集合中存放的是一组 TblFwxx 对象。 ---- 其中: inverse: 表示关系的维护由谁来执行。...---- 多对多:(学生→老师) Student.java 类 public class Student implements java.io.Serializable { // Fields...="id" /> java.lang.String
有了反射技术,我们可以在程序运行的过程中: 构建任意一个类的对象, 了解任意一个对象所属的类, 获悉任意一个类中的所有成员变量和方法, 调用任意一个类中的属性和方法。...首先需要通过上一篇文章中提到的方法,获取到 class对象,再通过 getDeclaredConstructors() 获取到该类下所有构造方法。...,必须使用 class 对象; 参数的顺序应和构造方法中的顺序一致; 要获取无参构造方法,可以输入 null 作为参数,或为空; 这种方式可能会产生方法找不到的异常,因此需要对异常进行捕获或抛出。...1.2、获取普通方法 1.2.1 获取所有普通方法 使用class对象的 getDeclaredMethods() ,可以获取当前类下所有普通方法(非构造方法)。...1.2.2 获取所有公有的普通方法 使用class对象的 getMethods() ,可以获取当前类及其所有父类下所有被 public 修饰的普通方法(非构造方法)。
1.2 缺点 不能使用在变化的对象上,特别是不同请求会造成不同属性的对象。由于Spring本身默认实例就是单例的,所以使用的时候需要判断应用场景,要不会造成张冠李戴的现象。...破坏单例的几种方法 2.1 通过构造器创建对象 一般来说,一个稍微 ✔️ 的单例模式,是不可以通过new来创建对象的,这个严格意义上不属于单例模式的破坏。...,并且构造出不同的对象,从而破坏单例模式。...风险就是序列化之后,再反序列化回来,对象的内容是一样的,但是对象却不是同一个对象了。不信?...那要是我们重写readResolveMethod()方法,就可以直接返回我们的对象,而不是返回反射之后的对象了。 试试?
-- 说明:maxElementsInMemory 设置 保存在内存中的缓存对象的最大数量 etemal 设置缓存中对象 是否永远不过期,如果值为true,超过设置被忽略...,缓存对象永远不过期 timeToIdleSeconds 设置缓存中对象在他过期之前的最大空闲时间,单位为秒 timeToLiveSeconds... 设置缓存中对象在他过期之前的最大生存时间 ,单位为秒 overflowToDisk 设置内存中的缓存对象达到maxElementsInMemory限制时,是否将缓存对象保存到硬盘中...@author MyEclipse Persistence Tools */ public class Category implements java.io.Serializable { private...@author MyEclipse Persistence Tools */ public class Product implements java.io.Serializable { private
Guestbook.java 代码: package com.b510.examples; import java.util.Date; public class Guestbook implements java.io.Serializable...我们看到的是我们只是跟新的是Guestbook对象的name属性值,但是呢,一个update语句却是 把所有的属性都给跟新了一遍,这样不就是很浪费时间吗?...怎样做才可以让Hibernate只是跟新我们所关注的东西,而不是我们所关注的东西,就不要去跟新他? 有一个办法可行滴! Guestbook.hbm.xml 代码: <?...我们会发现一个问题,那就是,我们只是插入了name,phone,title属性值,但是,insert语句却同时把 其他的东西也给添加了进去,我们是不希望看到这样的结果的,要解决这样的问题,我们同样有办法滴...这样就达到了我们的预期要求,要说明的是:version属性是不可为空的,所以我们没有设置值的时候,Hibernate也会给我们添加记录的
所以博客实体类中的代码如下: public class Blog implements java.io.Serializable { private Integer id; private...1)not-null 从名字就能看出来,这个表示非空,不用多说吧。 2)fetch 表示获取数据的方式,对应的值有两个:select和join。默认是select。...左图为设置lazy的值为false(实时加载,实体类中包含的所有对象都一次性查询出来), 右图为设置lazy的值为proxy(延时加载,默认只查询blog的数据,当需要使用其中包含的对象时再去数据库查询...它是cascade属性的默认值 save-update 当通过Session的save()、update()及saveOrUpdate()方法来保存或更新当前对象时,级联保存关联的临时对象,并且级联更新所有关联的游离对象...delete 当通过Session的delete()方法删除当前对象时,会级联删除关联的对象 all 包含save-update、delete的行为 delete-orphan 删除和当前对象解除关联关系的所有对象
com.ady01.demo2.filmlist; import lombok.*; import java.io.Serializable; import java.util.List; /*...* * description:分页对象 * time:2019-04-21 13:46 * author: 微信公众号:路人甲Java...lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; import java.io.Serializable...java.lang.String keywords; /** * 描述 */ private java.lang.String description; /...com.ady01.demo2.filmdetail; import lombok.Getter; import lombok.Setter; import lombok.ToString; import java.io.Serializable
加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。...这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射。...Java反射机制提供的功能 在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在运行时获取泛型信息 在运行时调用任意一个对象的成员变量和方法...实际上对象还是通过调用类的无参构造函数创建的, 若没有无参构造函数,则报错。 要想此方法正常的创建运行时类的对象,要求: 1.运行时类必须提供空参的构造器 2.空参的构造器的访问权限得够。...在javabean中要求提供一个public的空参构造器。
因为String对象是不可变的,所以它们可以共享 ?...=new String("abc");1.先创建一个空的String对象2.常量池中创建一个abc,并赋值给第二个String3.将第二个String的引用传递给第一个String注:如果常量池中有abc...);//变量相加给一个新值,所以str4引用的是个新的System.out.println(str4==str3);//变量相加给一个新值,所以str4引用的是个新的falsetruefalsefalse...,一个为指定字符数组的容量,如果事先知道String的长度小于16,就可以节省内存空间,他的数组和String的不一样,因为成员变量value数组没有被final修饰,所以可以修改他的引用变量的值,即可以引用到新的数组对象...,所以StringBuilder对象是可变的 append ?
因为String对象是不可变的,所以它们可以共享 ?...str=new String("abc"); 1.先创建一个空的String对象 2.常量池中创建一个abc,并赋值给第二个String 3.将第二个String的引用传递给第一个String 注:如果常量池中有...()==str4);//变量相加给一个新值,所以str4引用的是个新的 System.out.println(str4==str3);//变量相加给一个新值,所以str4引用的是个新的 false true...,即可以引用到新的数组对象, 所以StringBuilder对象是可变的 append ?...一旦创建无法更改,每次更改则是在新创建对象 StringBuilder和StringBuffer则是可修改的字符串 StringBuilder和StringBuffer的区别 StringBuffer
JSP2.0中的表达式语言(EL表达式) EL语法 EL的语法很简单,他最大的特点就是使用上很方便 例: ${sessionScope.user.sex} 所有EL都是以 ${ 为起始、以} 为结尾的...下列两者所代表的意思是一样的,但是需要保证要取得对象的那个的属性有相应的setXxx()和getXxx()方法才行。...,返回true 如果A为空数组时,返回true 如果A为空的Map时,返回true 如果A为空的Collection时,返回true 否则,返回false 注意: 在使用EL关系运算符时...--函数所在的类--> java.lang.String reverse( java.lang.String ) ...(public static) EL的隐含对象 EL也可以使用内置对象中设置的属性,需要使用特定的EL内置对象 属性范围 | 在EL中的对象 Page | pageScope
这种模式用于WEB应用程序的分层结构开发。 Model(模型) - 代表一个存取数据的java对象(POJO)。通常模型对象负责在数据库中存取数据。 View(视图) - 代表模型包含的数据的可视化。...注意: POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。...**M代表Model模型:**简单的说就是业务模型与数据模型。 比如:学生信息,就是一个数据模型;注册操作,就是一个业务模型。模型其实是业务规则和数据对象的抽象。...--配置servlet的对象的创建时间点:应用加载时创建。...由Handler 对具体的用户请求进行处理。 ModelAndView(对象) 视图名称或视图对象以及一些模型属性。
object测试”); } } ========================================================== CSubmitState 返回的对象的写法...===================================== package com.madhouse; public class CSubmitState implements java.io.Serializable...{ private int state; private java.lang.String msgID; private java.lang.String msgState... * * @return msgID */ public java.lang.String getMsgID() { return msgID... * * @param msgState */ public void setMsgState(java.lang.String msgState) {
介绍 遵从两大原则 1.绝不依赖JDK以外的源码 2.牺牲代码复用性,每个类都必须是单独的组件,绝不互相引用,做到完全解耦 package *; import java.io.Serializable...} } public ObjectUtils() { super(); } /** * 功能描述: * 〈设置一个默认的对象...nullStr : obj.toString(); } /** * 功能描述: * 〈取实现了Comparable接口的对象的最小值,自定义比较方法〉 *...c1 : c2; } } /** * 功能描述: * 〈取实现了Comparable接口的对象的最大值,自定义比较方法〉 * *...c1 : c2; } } /** * 对象中是否包含元素 * 支持的对象类型包括: * * String
org.springframework.beans.factory.annotation.Autowired; import projects.commons.utils.ValidateUtils; import java.io.Serializable...; } //删除首次添加到redis中的数据,因为未获取到用户账号,所以值为空 redisUtil.del(DEFAULT_SESSION_KEY_PREFIX...2019/8/15 */ @Override public Collection getActiveSessions() { //构建返回对象...redisUtil.del(sessionId); } } /** * 创建sessionId * * @return java.io.Serializable...sessionId); } return session; } /** * 拼凑sessionId * * @return java.lang.String
,查询出Info对象的信息,再设置Info对象的属性。...如果info为空,那么是查询所有。 if (info !...如果info为空,那么是查询所有。 if (info !...将查询的对象设置为User,根据用户名的名字来进行条件查询。...如果info为空,那么是查询所有。 if (user !
创建User类 //使用默认的ClassPool ClassPool pool = ClassPool.getDefault(); //1.创建一个空类 CtClass ctClass = pool.makeClass...ClassPool对象的makeClass方法创建User类。...细心的小伙伴肯定会发现在方法体中通过0引用了成员变量name,估计小伙伴们也猜到了这个 0 是干啥的。没错,它在生成User类后会被编译成this。...,只是在创建CtConstructor对象时,在CtConstructor的构造方法的第一个参数类型数组中使用pool.get("java.lang.String")添加了一个数组元素,表示生成的目标类的构造方法存在一个...效果符合我们的预期。 案例总结 我们使用Javassist动态生成了符合预期的User类对象,通过本文的学习,我们掌握了如何使用Javassist生成JavaBean对象。是不是很简单呢?
在内部,StringBuilder对象被当作是一个包含字符序列的变长数组。 一般情况下,速度从快到慢:StringBuilder > StringBuffer > String。...public final class String implements java.io.Serializable, Comparable, CharSequence { private...对象。...为什么有这样的情况,首先分析StringBuilder > String,这个的主要原因可以在两个例子对比中看出,在String中,每次拼接新的字符串,都会new一个StringBuilder对象,也就是说如果拼接...N次,就需要new出来N个StringBuilder对象,这样无疑上速度会慢很多。