Files
springboot-demo/target/classes/com/example/demo/controller/AdvancedLabController.class

93 lines
14 KiB
Plaintext
Raw Normal View History

<EFBFBD><EFBFBD><EFBFBD><EFBFBD>=b
 java/lang/Object<init>()V  
1com/example/demo/controller/AdvancedLabControllerhandlerMappingTLorg/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMapping;  jwtUtil+Lcom/example/demo/security/LearningJwtUtil;
 Rorg/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMappinggetHandlerMethods()Ljava/util/Map;   java/util/MapentrySet()Ljava/util/Set;  !" java/util/Setstream()Ljava/util/stream/Stream;$ %&applyR(Lcom/example/demo/controller/AdvancedLabController;)Ljava/util/function/Function; ()* +,java/util/stream/Streammap8(Ljava/util/function/Function;)Ljava/util/stream/Stream;. /0compare()Ljava/util/Comparator; (2 34sorted1(Ljava/util/Comparator;)Ljava/util/stream/Stream; (6 78toList()Ljava/util/List;:*com/example/demo/controller/UserController
< =>summarizeClass"(Ljava/lang/Class;)Ljava/util/Map;@+com/example/demo/controller/LearnControllerB.com/example/demo/controller/AopEventControllerD7com/example/demo/controller/auth/LearningAuthController FGH IJjava/util/ListofZ(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;L
routeCount FN OPsize()I
RST UVjava/lang/IntegervalueOf(I)Ljava/lang/Integer;XroutesZclassSummaries\tip^YUse reflection to connect annotations, method signatures, and runtime route registration. ` Ia<00>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;
cde fg#com/example/demo/common/ApiResponseok9(Ljava/lang/Object;)Lcom/example/demo/common/ApiResponse;icom/example/demo/model/User
klm nojava/lang/ClassgetDeclaredFields()[Ljava/lang/reflect/Field;
qrs !tjava/util/Arrays.([Ljava/lang/Object;)Ljava/util/stream/Stream;$w className
ky z{getName()Ljava/lang/String;}
fieldCountfields<00>SReflection makes frameworks possible because metadata can be discovered at runtime.
<00><00><00> <00><00>java/lang/Mathmin(II)I
<00><00> <00><00>max
<00><00><00> <00><00>java/util/concurrent/ExecutorsnewFixedThreadPool)(I)Ljava/util/concurrent/ExecutorService;<00>)java/util/concurrent/atomic/AtomicInteger
<00>
<00><00><00> <00><00>java/time/Instantnow()Ljava/time/Instant;
<00> <00><00>
createJobsd(ILjava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/ExecutorService;)Ljava/util/List;<00> %<00>"()Ljava/util/function/IntFunction; F<00> <00><00>toArray5(Ljava/util/function/IntFunction;)[Ljava/lang/Object;<00>)[Ljava/util/concurrent/CompletableFuture;
<00><00><00> <00><00>&java/util/concurrent/CompletableFutureallOfS([Ljava/util/concurrent/CompletableFuture;)Ljava/util/concurrent/CompletableFuture;
<00><00> <00><00>join()Ljava/lang/Object; F<00> %<00>()Ljava/util/function/Function;<00>tasks<00>poolSize<00> finalCounter
<00><00> <00>Pget<00>
durationMs
<00><00><00> <00><00>java/time/DurationbetweenP(Ljava/time/temporal/Temporal;Ljava/time/temporal/Temporal;)Ljava/time/Duration;
<00><00> <00><00>toMillis()J
<00><00><00> U<00>java/lang/Long(J)Ljava/lang/Long;<00>sample (<00> <00><00>limit(J)Ljava/util/stream/Stream;<00>LAtomicInteger keeps the shared counter safe when many tasks run in parallel. <00> I<00><00>(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map; <00><00><00> <00>8$java/util/concurrent/ExecutorService shutdownNow
<00><00><00> <00><00>java/lang/String substring(I)Ljava/lang/String;<00>subject
<00><00><00> <00><00>)com/example/demo/security/LearningJwtUtilusername&(Ljava/lang/String;)Ljava/lang/String;<00>claims
<00><00> <00><00>#(Ljava/lang/String;)Ljava/util/Map;<00>_JWT claims can be parsed without a database lookup, which is one reason token auth scales well. <00> I<00>}(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map; <00><00><00> <00><00>java/util/stream/IntStreamrange (II)Ljava/util/stream/IntStream; %s(Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/ExecutorService;)Ljava/util/function/IntFunction; <00> mapToObj;(Ljava/util/function/IntFunction;)Ljava/util/stream/Stream;  
<00>java/util/Map$EntrygetValue ,org/springframework/web/method/HandlerMethodpath  <00>getKey=org/springframework/web/servlet/mvc/method/RequestMappingInfo
 getPatternValues
 {toStringmethods
 getMethodsConditionP()Lorg/springframework/web/servlet/mvc/condition/RequestMethodsRequestCondition;
!"# $Lorg/springframework/web/servlet/mvc/condition/RequestMethodsRequestCondition
getMethods&handler
 ( )* getBeanType()Ljava/lang/Class;
k, -{ getSimpleName
 / 01 getMethod()Ljava/lang/reflect/Method;
3y4java/lang/reflect/Method6 78makeConcatWithConstants8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;:
parameters
3< => getParameters ()[Ljava/lang/reflect/Parameter;<00>
kA BCgetDeclaredMethods()[Ljava/lang/reflect/Method;E FGtest ()Ljava/util/function/Predicate; (I JKfilter9(Ljava/util/function/Predicate;)Ljava/util/stream/Stream; $N annotations
kP QRgetAnnotations$()[Ljava/lang/annotation/Annotation;
<00>U methodCountWnameY
returnType
3[ \* getReturnType^parameterCount
3` aPgetParameterCount
3P <00> <00>
fygjava/lang/reflect/Fielditype
fk l*getType
fP opq r*java/lang/annotation/AnnotationannotationType
3t uv isSynthetic()Z
xkyjava/lang/reflect/Parameter { <00>|K(Ljava/util/concurrent/atomic/AtomicInteger;I)Ljava/util/function/Supplier;
<00>~ <01> supplyAsyncf(Ljava/util/function/Supplier;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;
<00><01> <01>PincrementAndGet
<01><01><01> <01><01>java/lang/Threadsleep(J)V<01>java/lang/InterruptedException
<01><01> <01><01> currentThread()Ljava/lang/Thread;
<01><01> <01> interrupt<01>task<01>thread
<01>y<01>counterAfterIncrement <01> <00><01>&(Ljava/lang/Object;)Ljava/lang/Object;
<00><01> <01><01> compareTo(Ljava/lang/String;)I<00>(Lorg/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMapping;Lcom/example/demo/security/LearningJwtUtil;)VCodeLineNumberTableLocalVariableTablethis3Lcom/example/demo/controller/AdvancedLabController;MethodParameters"RuntimeVisibleParameterAnnotations8Lorg/springframework/beans/factory/annotation/Qualifier;valuerequestMappingHandlerMappingreflectionRoutes'()Lcom/example/demo/common/ApiResponse;Ljava/util/List;LocalVariableTypeTableGLjava/util/List<Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;>; Signature^()Lcom/example/demo/common/ApiResponse<Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;>;RuntimeVisibleAnnotations4Lorg/springframework/web/bind/annotation/GetMapping;/reflection/routesreflectUserModel/reflection/user-modelsimulateConcurrency)(II)Lcom/example/demo/common/ApiResponse;jobsresultsI safeTasks safePoolSizeexecutor&Ljava/util/concurrent/ExecutorService;counter+Ljava/util/concurrent/atomic/AtomicInteger;startLjava/time/Instant;qLjava/util/List<Ljava/util/concurrent/CompletableFuture<Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;>;>; StackMapTable<01>java/lang/Throwable`(II)Lcom/example/demo/common/ApiResponse<Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;>;/concurrency/simulate6Lorg/springframework/web/bind/annotation/RequestParam; defaultValue124 jwtClaims9(Ljava/lang/String;)Lcom/example/demo/common/ApiResponse; authorizationLjava/lang/String;tokenp(Ljava/lang/String;)Lcom/example/demo/common/ApiResponse<Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;>; /jwt/claims7Lorg/springframework/web/bind/annotation/RequestHeader; Authorization<00>(ILjava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/ExecutorService;)Ljava/util/List<Ljava/util/concurrent/CompletableFuture<Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;>;>; toRouteView&(Ljava/util/Map$Entry;)Ljava/util/Map;entryLjava/util/Map$Entry; handlerMethod.Lorg/springframework/web/method/HandlerMethod;<00>Ljava/util/Map$Entry<Lorg/springframework/web/servlet/mvc/method/RequestMappingInfo;Lorg/springframework/web/method/HandlerMethod;>;<00>(Ljava/util/Map$Entry<Lorg/springframework/web/servlet/mvc/method/RequestMappingInfo;Lorg/springframework/web/method/HandlerMethod;>;)Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;Ljava/lang/Class;Ljava/lang/Class<*>;K(Ljava/lang/Class<*>;)Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>; toMethodView+(Ljava/lang/reflect/Method;)Ljava/util/Map;methodLjava/lang/reflect/Method;Q(Ljava/lang/reflect/Method;)Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>; toFieldView*(Ljava/lang/reflect/Field;)Ljava/util/Map;fieldLjava/lang/reflect/Field;P(Ljava/lang/reflect/Field;)Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;lambda$summarizeClass$65(Ljava/lang/annotation/Annotation;)Ljava/lang/String;
annotation!Ljava/lang/annotation/Annotation;lambda$summarizeClass$5(Ljava/lang/reflect/Method;)Zlambda$toRouteView$41(Ljava/lang/reflect/Parameter;)Ljava/lang/String; parameterLjava/lang/reflect/Parameter;lambda$createJobs$3|(Ljava/util/concurrent/atomic/AtomicInteger;Ljava/util/concurrent/ExecutorService;I)Ljava/util/concurrent/CompletableFuture;indexlambda$createJobs$2=(Ljava/util/concurrent/atomic/AtomicInteger;I)Ljava/util/Map; exception Ljava/lang/InterruptedException;currentlambda$simulateConcurrency$1,(I)[Ljava/util/concurrent/CompletableFuture;x$0lambda$reflectionRoutes$0!(Ljava/util/Map;Ljava/util/Map;)IleftLjava/util/Map;right
SourceFileAdvancedLabController.java8Lorg/springframework/web/bind/annotation/RestController;8Lorg/springframework/web/bind/annotation/RequestMapping;/api/labBootstrapMethods
 "java/lang/invoke/LambdaMetafactory metafactory<00>(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;<01>
 <01><01><01>'(Ljava/lang/Object;Ljava/lang/Object;)I!
" %
& <01><01><01>)(I)Ljava/lang/Object;+
, <00>09(Ljava/util/concurrent/CompletableFuture;)Ljava/util/Map;2
3 <01><01>5+(I)Ljava/util/concurrent/CompletableFuture;7
89: 7;$java/lang/invoke/StringConcatFactory<00>(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;=#?
@ <01><01><01>C(Ljava/lang/Object;)ZE
F <01><01><01>I
J <01><01><01>M
N <01><01><01> nR4(Ljava/lang/annotation/Annotation;)Ljava/lang/Class;+U%(Ljava/lang/Class;)Ljava/lang/String;<00>X
Y <01> InnerClassesEntry^%java/lang/invoke/MethodHandles$Lookup`java/lang/invoke/MethodHandlesLookup! <01><01>Y*<2A>*+<2B>*,<2C> <0A><01>&' ()<01> <01><01> <01>  <01><01><01>s<01><01><01><01><00>d*<2A><07><11><00>*<2A>#<00>'<00>-<00>1<00>5L*9<>;*?<3F>;*A<>;*C<>;<3B>EMK+<2B>M<00>QW+Y,[]<5D>_<>b<><01>6 -.!/&0,2/354;5A6D2H9K:]9<01> d<01><01>,8X<01>HZ<01><01>,8X<01>HZ<01><01><01><01><01><01>[s<01><01><01><01><00>9h<>j<>p*<2A>u<00>'<00>5Lvh<>x|+<2B>M<00>Q~+[<12><>_<>b<><01>CDEGH#I2G<01>9<01><01> <01><01>  <01><01><01><01><01><01>[s<01><01><01><01><01> <00> <20><00><><00>><08><00><><00>6<04><00>:<05><00>Y<EFBFBD><00>:<06><00>:*<05><00>:<08><00><00><00><00><00><><00><><00>W<08><00><00><00><00>'<00>5: <12><1D>Q<12><04>Q<12><06><00><>Q<12><07><00><><00><>Ƹ<00><12> <09><00>ѹ<00><00>5[׸ٸb:
<05><00>W
<EFBFBD>: <05><00>W <0B>,<00><00><00><00><00><01>VT UVW'X,[7\M]Y^^_eahbocvd<00>e<00>f<00>a<00>j<00>a<00>j<00>k<01>f
7<00><01><01>eT<01><01> <00><01><01><00><00><01><00><00><01> <00><01><01><00><01><01><00><01><01>'<00><01><01>,<00><01><01><01>7<00><01><01>eT<01><01> <01><01><00><00><00><00><01><01> <00><00><01><01><01><01><01>[s<01><01><01><01>s<01><01><01>s<01><01><01><01>t&+<07><00>M<12>*<2A> ,<2C><00><12>*<2A> ,<2C><00>[<12><><00><>b<><01>pqrsq<01> &<01><01>&<01><01><01><01><01><01><01><01><01><01><01>[s<01><01> <01><01>s<01><00><00><01>k<1B><00>,-<2D><00><00><00>5<00><01>y z<00>y<01>*<01><01><00><01><01><01><01><01><01> <00><01><01><01><01><01><01><01><00> g+<2B><00> M +<2B><00><12><14>+<2B><00><12><1C> <20>%,<2C>'<27>+,<2C>.<2E>2<>59,<2C>.<2E>;<3B>p<>?<00>'<00>5<00>_<><01>& <00>
<00><00> <00>5<00>K<00>Y<00>^<00>c<00><01> g<01><01>g<01><01>
]<01><01><01> g<01><01><01><01><01><01>=><01><00>U+<2B>@<40>p<>D<00>H*<2A>L<00>'<00>5Mv+<2B>+M+<2B>O<>p<>S<00>'<00>5T,<2C>M<00>Q,<2C>_<><01>& <00> <00><00><00>"<00>%<00>,<00>E<00>Q<00><01> U<01><01>Ui<01>"3<01><01>Ui<01>"3<01><01>i<01><01><01><01><01><00> BV+<2B>2X+<2B>Z<>+]+<2B>_<>QM+<2B>b<>p<>c<00>'<00>d<00>'<00>5<00>_<><01><00><00> <00><00><00>><00><01>B<01><01>B<01><01><01><01><01><01><01><01><01>|8V+<2B>eh+<2B>j<>+M+<2B>m<>p<>c<00>'<00>d<00>'<00>5<00><00><><01><00><00> <00><00>4<00><01>8<01><01>8<01><01><01><01><01><01>
<01><01><01>4
*<2A>n<00>+<2B><01><00><01> 
<01><01>
<01><01><01>B *<2A>s<><04><03><01><00><01>  <01><01><01> @
<01><01><01>2*<2A>w<>+<2B><01><00><01> <01><01>
<01><01><01>J *<1C>z+<2B>}<7D><01>z<01>  <01><01> <01><01> <01><01>
<01><01><00>9*<2A><01>=<01>p<><01>ia<69><01><>
N<EFBFBD><01><><01><01><1B>Q<01><><01><><01><01><1C>Q<><00><><01><01>*
{}<00>~<00>"<00>(<00>2<00>5<00><01>*9<01><01>9<01><01>4<01><01><02><00><01>
<01>/<1A><00><><01>\<01> <01>
<01>P* <0A><01><00>+ <0A><01><00><17><01><><01>/<01> 
 
  <01><01>[s<00> #$'(*-./(146<>ABDGHKLOPQSTVWZ[\ ]_a