void main(String[] args) { Person person1 = new Person(); Person person2 = new Person("fsx (Reflection.java:102) at java.lang.Class.newInstance(Class.java:436) at com.fsx.maintest.Main.main( public static void main(String[] args) throws Exception { Person person = new Person("fsx ', age=18} Person{name='fsx', age=18} false 完成了内容的克隆,但是可以发现是个全新的对象。 ', age=18} Person{name='fsx', age=18} false 备注:JDK序列化、反序列化特别特别耗内存。
2.fsx[3] 相关地址:https://github.com/humanwhocodes/fsx 一个现代化的 fs 系统: 读文件 // read plain text const text = await fsx.text("/path/to/file.txt"); // read JSON const json = await fsx.json("/path/to/file.json"); fsx.write("/path/to/file.txt", "Hello world!") buffer; // write a buffer await fsx.write("/path/to/file.txt", bytes); 检测 if (await fsx.isFile("/path tab=readme-ov-file#-table-of-contents [3] fsx: https://github.com/humanwhocodes/fsx [4] drawing.garden
currUser=fsx。 ","demo_name_and_age":"fsx18"} 反序列化json到vo -> Main.DemoVo(demoName=fsx, demoAge=18, demoNameAndAge=fsx18 若使用另外三种,我把结果摘录如下: CamelCase: 序列化vo对象到json -> {"demoAge":18,"demoName":"fsx","demoNameAndAge":"fsx18"} -> {"DemoAge":18,"DemoName":"fsx","DemoNameAndAge":"fsx18"} 反序列化json到vo -> Main.DemoVo(demoName=fsx, ":"fsx18"} 反序列化json到vo -> Main.DemoVo(demoName=fsx, demoAge=18, demoNameAndAge=fsx18) FastJson默认使用CamelCase
//表示匹配com.fsx.run.UserService中所有的公有方法 2)execution(public * com.fsx.run.UserService.*(..)) //表示匹配com.fsx.run包及其子包下的所有方法 3)execution(* com.fsx.run..*.*(..)) Pointcut定义时,还可以使用&&、||、! 这三个运算。 进行逻辑运算 // 签名:消息发送切面 @Pointcut("execution(* com.fsx.run.MessageSender.*(..))") private void logSender( ){} // 签名:消息接收切面 @Pointcut("execution(* com.fsx.run.MessageReceiver.*(..))") private void logReceiver “@within(com.fsx.run.anno.MyAnno)”匹配被调用的方法声明的类上拥有MyAnno注解的情况。
@1f32e575 System.out.println(sReflection); //com.fsx.bean.Singleton@279f2327 System.out.println (s == sReflection); // false } } 运行输出: com.fsx.bean.Singleton@1f32e575 com.fsx.bean.Singleton@279f2327 @452b3a41 com.fsx.bean.Singleton@6193b845 false 可以看出,序列化前后两个对象并不相等。 @1f32e575 System.out.println(sReflection); //com.fsx.bean.Singleton@279f2327 System.out.println (s == sReflection); // false } } 运行打印: 拿到了构造器:private com.fsx.bean.EnumSingleton(java.lang.String
-1 play线程:fsx-Executor-2 这里我用一个比较极端的案例来说明问题:主线程调用异步线程,异步线程里继续调用异步线程的case。 System.out.println("enter的线程:" + Thread.currentThread().getName()); String name = "fsx (HelloServiceImpl.java:34) eat的线程:fsx-Executor-1 java.lang.RuntimeException: eat抛出运行异常 at com.fsx.service.HelloServiceImpl.eat System.out.println("enter的线程:" + Thread.currentThread().getName()); String name = "fsx System.out.println("enter的线程:" + Thread.currentThread().getName()); String name = "fsx
", 16); } @Bean public Person person2() { return new Person("fsx02", 18); } } ", 16); } @MyAnno @Bean public Person person2() { return new Person("fsx02", , age=16), Person(name=fsx02, age=18)],符合预期。 ", 18); } @Qualifier @Bean public Person person3() { return new Person("fsx03 ", 20); } } 运行的最终结果是: [Person(name=fsx01, age=16), Person(name=fsx02, age=18)] 它把@Qualifier指定的value
测试 public static void main(String[] args) { Person[] people = new Person[]{new Person("fsx Demo public static void main(String[] args) { Person[] people = new Person[]{new Person("fsx Demo: public static void main(String[] args) { Person[] people = new Person[]{new Person("fsx 排序后:" + StringUtils.arrayToCommaDelimitedString(people)); } // 结果 把null放在了第一位 排序前:Person{name='fsx ', age=18},null,Person{name='dy', age=15} 排序后:null,Person{name='dy', age=15},Person{name='fsx', age=18
是可以被spring应用识别的特定格式 System.out.println(ArrayUtils.toString(args)); // {--server.port=8080,fsx 比如我上面写成--server.port=9090 fsx最终的结果如下(非选项参数是个List装载的) ? ] INFO com.fsx.boot1demo1.maintest.Main - random int(0,1):0 17:31:56.651 [main] INFO com.fsx.boot1demo1 .maintest.Main - random int(1,3):1 17:31:56.651 [main] INFO com.fsx.boot1demo1.maintest.Main - random [main] INFO com.fsx.boot1demo1.maintest.Main - random int(5,6):5 17:31:56.652 [main] INFO com.fsx.boot1demo1
Little Navmap支持FSX,FSX Steam Edition,Prepar3d版本2,3,4和X-Plane --------------------------------------- 如果安装其他模拟器而不是FSX SP2,请参阅联机手册。 我建议在安装新版本之前删除以前Little Navmap版本的所有已安装文件。 --------------------- 根据下载的版本,该实验可以包含两个附加程序: Little Navconnect ================= 连接Little Navmap和FSX
DRA 允许 FSx for Lustre 文件系统与一个或多个 S3 存储桶或前缀自动同步数据。 FSx for Lustre 文件系统中“逐出”(evict)。 此操作仅删除 FSx for Lustre 上的文件副本,S3 中的数据不受影响,从而释放 FSx for Lustre 上的存储容量以供更热的数据使用 14。 Amazon FSx for Lustre 智能分层架构图 下图概念性地展示了 Amazon FSx for Lustre 智能分层的架构: FSx for Lustre 智能分层通过其内部多级自动分层以及与 Amazon FSx for Lustre for ML/HPC: FSx for Lustre 常用于高性能计算和机器学习的数据暂存和 I/O 管理,提供类似本地集群文件系统的访问体验 37。
Person personModelAttr(HttpServletRequest request) { request.setAttribute("myApplicationName", "fsx-application , HttpServletRequest request, ModelMap modelMap) { System.out.println(myApplicationName); //fsx-application // 从request里获取 System.out.println(request.getAttribute("myApplicationName")); //fsx-application fsx-application null Person(name=非功能方法, age=50) 这里务必注意:@RequestAttribute("myApplicationName")注解如果省略, forward请求转发带过来 形如这样: request.setAttribute("myApplicationName", "fsx-application"); request.getRequestDispatcher
Employee emp1 = new Employee(); 字节码: 0: new #19 // class com/fsx/demo/Employee 3: dup 4: invokespecial #21 // Method com/fsx/demo/Employee."":()V 2.使用Class类的newInstance方法 这个方法创建对象其实我们用得也比较多 所以类必须有public无参构造函数才行 Employee emp2 = (Employee) Class.forName("com.fsx.demo.mployee").newInstance(); Employee emp4 = (Employee) emp2.clone(); 字节码: 162: invokevirtual #87 // Method com/fsx/demo//Employee.clone
', age=30} System.out.println(parser.parseExpression("#myPerson.name").getValue(ctx)); //fsx ', age=18} System.out.println(parser.parseExpression("#root.name").getValue(context)); //fsx '").getValue(context)); //true System.out.println(parser.parseExpression("#root.name=='fsx'") .getValue(context)); //true System.out.println(parser.parseExpression("name.equals('fsx')"). BeanFactoryAccessor生效,输出:person-->Person{name='fsx', age=18} @RunWith(SpringJUnit4ClassRunner.class)
age" value="18"/> </bean> 可以看到此xml配置Bean中使用了占位符:${diy.name}来引用下面属性文件的属性值~ my.properties: diy.name = fsx-fsx System.out.println(environment.getProperty("diy.name")); } } 打印结果为: Person{name='${diy.name}', age=18} fsx-fsx ClassPathResource("my.properties")); // 加载指定的属性文件 return configurer; } 再次运行,打印如下: Person{name='fsx-fsx ', age=18} fsx-fsx 完美~ 关于xml配置Bean处理占位符问题,为了加深理解,亦可参考:【小家Spring】Spring IoC是如何使用BeanWrapper和Java内省结合起来给 ,此时运行输出如下: Person{name='fsx-fsx', age=18} null 会发现environment.getProperty("diy.name")为null,也就是说该属性值并不会存在应用的环境内了
()] java.beans.MethodDescriptor[name=setAge; method=public void com.fsx.bean.Child.setAge(java.lang.Integer )] java.beans.MethodDescriptor[name=setName; method=public void com.fsx.bean.Child.setName(java.lang.String )] java.beans.MethodDescriptor[name=getAge; method=public java.lang.Integer com.fsx.bean.Child.getAge (); writeMethod=public void com.fsx.bean.Child.setAge(java.lang.Integer)] java.beans.PropertyDescriptor (); writeMethod=public void com.fsx.bean.Child.setName(java.lang.String)] ---------------------------
com.fsx.serviceloader.MyIService // 注意这个是接口 com.fsx.serviceloader.HDFSService com.fsx.serviceloader.LocalService 注意到上面说了唯一一个强制要求,就是必须能够实例化(有空的构造函数) 因此做修改如下(只写实现类): com.fsx.serviceloader.HDFSService com.fsx.serviceloader.LocalService ,com.fsx.serviceloader.LocalService // 若有非常多个需要换行 可以这么写 // 前面是否顶头没关系(Spring在4.x版本修复了这个bug) com.fsx.serviceloader.IService =\ com.fsx.serviceloader.HDFSService,\ com.fsx.serviceloader.LocalService 我们这么测试一下即可: public , com.fsx.serviceloader.LocalService] System.out.println(services); //[com.fsx.serviceloader.HDFSService
,下面的例子基于:spring.properties在类路径下(也就是maven工程的resources目录下) demo.properties位于maven工程的java目录下,包名为:com/fsx /等 // 这里Main所在包为:com.fsx.maintest 因此最终找的文件地址为:com/fsx/maintest/demo.properties 会去这里找文件 所以它这里需要把路径写全了:com/fsx/maintest/demo.properties // 需要注意的是,因为它没有对路径处理的,所以不支持 `/`打头的这种绝对路径 获取类路径的地址 InputStream systemResourceAsStream = ClassLoader.getSystemResourceAsStream("com/fsx /demo-war/target/classes/com/fsx/maintest/demo.properties"); System.out.println(file.exists()
show demo.hello(); System.out.println(proxyFactory.getTargetClass()); //class com.fsx.maintest.Demo 它也不符合切点表达式的要求啊 看下面的解释吧 // 你被拦截了:方法名为:hello 参数为--[] // com.fsx.maintest.Demo@643b1d11 这里是要求必须有空的构造函数的 MyDemo myDemo = (MyDemo) enhancer.create(new Class[]{String.class}, new Object[]{"fsx $$EnhancerByCGLIB$$b07b3819@7960847b fsx 这样我们就简单的实现了,对一个对象进行增强。 $Proxy0 cannot be cast to com.fsx.maintest.Demo //Demo demo = (Demo) proxyFactory.getProxy();
WwveWcqGppaHVvLmxpdmUiLCJhc3NpZ25lZUVtYWlsIjoiIiwibGljZW5zZVJlc3RyaWN0aW9uIjoiIiwiY2hlY2tDb25jdXJyZW50VXNlIjpmYWxzZSwicHJvZHVjdHMiOlt7ImNvZGUiOiJDTCIsInBhaWRVcFRvIjoiMjA5OS0xMi0zMSIsImV4dGVuZGVkIjpmYWxzZSwicHJvcGVydGllcyI6e319LHsiY29kZSI6IkRHIiwicGFpZFVwVG8iOiIyMDk5LTEyLTMxIiwiZXh0ZW5kZWQiOmZhbHNlLCJwcm9wZXJ0aWVzIjp7fX0seyJjb2RlIjoiRFMiLCJwYWlkVXBUbyI6IjIwOTktMTItMzEiLCJleHRlbmRlZCI6ZmFsc2UsInByb3BlcnRpZXMiOnt9fSx7ImNvZGUiOiJHTyIsInBhaWRVcFRvIjoiMjA5OS0xMi0zMSIsImV4dGVuZGVkIjpmYWxzZSwicHJvcGVydGllcyI6e319LHsiY29kZSI6IklJIiwicGFpZFVwVG8iOiIyMDk5LTEyLTMxIiwiZXh0ZW5kZWQiOmZhbHNlLCJwcm9wZXJ0aWVzIjp7fX0seyJjb2RlIjoiUFMiLCJwYWlkVXBUbyI6IjIwOTktMTItMzEiLCJleHRlbmRlZCI6ZmFsc2UsInByb3BlcnRpZXMiOnt9fSx7ImNvZGUiOiJQQyIsInBhaWRVcFRvIjoiMjA5OS0xMi0zMSIsImV4dGVuZGVkIjpmYWxzZSwicHJvcGVydGllcyI6e319LHsiY29kZSI6IlJEIiwicGFpZFVwVG8iOiIyMDk5LTEyLTMxIiwiZXh0ZW5kZWQiOmZhbHNlLCJwcm9wZXJ0aWVzIjp7fX0seyJjb2RlIjoiUk0iLCJwYWlkVXBUbyI6IjIwOTktMTItMzEiLCJleHRlbmRlZCI6ZmFsc2UsInByb3BlcnRpZXMiOnt9fSx7ImNvZGUiOiJXUyIsInBhaWRVcFRvIjoiMjA5OS0xMi0zMSIsImV4dGVuZGVkIjpmYWxzZSwicHJvcGVydGllcyI6e319LHsiY29kZSI6IkRQTiIsInBhaWRVcFRvIjoiMjA5OS0xMi0zMSIsImV4dGVuZGVkIjpmYWxzZSwicHJvcGVydGllcyI6e319LHsiY29kZSI6IkRNIiwicGFpZFVwVG8iOiIyMDk5LTEyLTMxIiwiZXh0ZW5kZWQiOmZhbHNlLCJwcm9wZXJ0aWVzIjp7fX0seyJjb2RlIjoiREIiLCJwYWlkVXBUbyI6IjIwOTktMTItMzEiLCJleHRlbmRlZCI6ZmFsc2UsInByb3BlcnRpZXMiOnt9fSx7ImNvZGUiOiJEQyIsInBhaWRVcFRvIjoiMjA5OS0xMi0zMSIsImV4dGVuZGVkIjpmYWxzZSwicHJvcGVydGllcyI6e319LHsiY29kZSI6IlJTMCIsInBhaWRVcFRvIjoiMjA5OS0xMi0zMSIsImV4dGVuZGVkIjpmYWxzZSwicHJvcGVydGllcyI6e319LHsiY29kZSI6IlJTVSIsInBhaWRVcFRvIjoiMjA5OS0xMi0zMSIsImV4dGVuZGVkIjpmYWxzZSwicHJvcGVydGllcyI6e319LHsiY29kZSI6IlJDIiwicGFpZFVwVG8iOiIyMDk5LTEyLTMxIiwiZXh0ZW5kZWQiOmZhbHNlLCJwcm9wZXJ0aWVzIjp7fX0seyJjb2RlIjoiUERCIiwicGFpZFVwVG8iOiIyMDk5LTEyLTMxIiwiZXh0ZW5kZWQiOnRydWUsInByb3BlcnRpZXMiOnt9fSx7ImNvZGUiOiJQU0kiLCJwYWlkVXBUbyI6IjIwOTktMTItMzEiLCJleHRlbmRlZCI6dHJ1ZSwicHJvcGVydGllcyI6e319LHsiY29kZSI6IlBDV01QIiwicGFpZFVwVG8iOiIyMDk5LTEyLTMxIiwiZXh0ZW5kZWQiOnRydWUsInByb3BlcnRpZXMiOnt9fSx7ImNvZGUiOiJQU0VRVUVOQ0VESUFHUkEiLCJwYWlkVXBUbyI6IjIwOTktMTItMzEiLCJleHRlbmRlZCI6dHJ1ZSwicHJvcGVydGllcyI6e319XSwibWV0YWRhdGEiOiIwMTIwMjMwNTExUFNBTjAwMDAwNSIsImhhc2giOiJUUklBTDotNDAzMDMzMDU1IiwiZ3JhY2VQZXJpb2REYXlzIjozLCJhdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlLCJpc0F1dG9Qcm9sb25nYXRlZCI6ZmFsc2V9