From 9d57a5eb6263e601f0df1b555b9ef55e8391f57b Mon Sep 17 00:00:00 2001 From: lenon-lee Date: Sun, 30 Jan 2022 19:45:57 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E7=AC=AC=E4=B8=89=E5=91=A8=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A=E7=AC=AC=E4=B8=80=E9=81=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 02nio/nio01/pom.xml | 2 +- .../java/java0/nio01/netty/HttpHandler.java | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/02nio/nio01/pom.xml b/02nio/nio01/pom.xml index e42a62f2..297fecd1 100644 --- a/02nio/nio01/pom.xml +++ b/02nio/nio01/pom.xml @@ -57,7 +57,7 @@ io.netty netty-all - 4.1.51.Final + 4.1.72.Final diff --git a/02nio/nio01/src/main/java/java0/nio01/netty/HttpHandler.java b/02nio/nio01/src/main/java/java0/nio01/netty/HttpHandler.java index 81f31d2e..02209a8e 100644 --- a/02nio/nio01/src/main/java/java0/nio01/netty/HttpHandler.java +++ b/02nio/nio01/src/main/java/java0/nio01/netty/HttpHandler.java @@ -10,6 +10,13 @@ import io.netty.handler.codec.http.HttpUtil; import io.netty.util.ReferenceCountUtil; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.HttpResponse; +import org.apache.http.impl.client.HttpClients; + +import java.util.Scanner; + import static io.netty.handler.codec.http.HttpHeaderNames.CONNECTION; import static io.netty.handler.codec.http.HttpHeaderValues.KEEP_ALIVE; import static io.netty.handler.codec.http.HttpResponseStatus.NO_CONTENT; @@ -51,6 +58,19 @@ private void handlerTest(FullHttpRequest fullRequest, ChannelHandlerContext ctx, // httpGet ... http://localhost:8801 // 返回的响应,"hello,nio"; // value = reponse.... +// 第三周作业第一道 + // 创建一个HttpClient对象 + CloseableHttpClient httpclient = HttpClients.createDefault(); + // 创建一个httpGet对象 + HttpGet httpget = new HttpGet("http://localhost:8801"); + HttpResponse httpresponse = httpclient.execute(httpget); + Scanner sc = new Scanner(httpresponse.getEntity().getContent()); + StringBuilder sb = new StringBuilder(); + while (sc.hasNext()) { + sb.append(sc.nextLine() + "\n"); + } + value = sb.toString(); + System.out.println(value); response = new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(value.getBytes("UTF-8"))); response.headers().set("Content-Type", "application/json"); From 3d7dabe84395b6a30c9a5ea0f673834b1d730a67 Mon Sep 17 00:00:00 2001 From: lenon-lee Date: Tue, 1 Feb 2022 11:12:12 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E7=AC=AC=E4=B8=89=E5=91=A8=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A=E7=AC=AC=E4=B8=80=E9=81=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/java0/nio01/netty/HttpHandler.java | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/02nio/nio01/src/main/java/java0/nio01/netty/HttpHandler.java b/02nio/nio01/src/main/java/java0/nio01/netty/HttpHandler.java index 02209a8e..d28ea06f 100644 --- a/02nio/nio01/src/main/java/java0/nio01/netty/HttpHandler.java +++ b/02nio/nio01/src/main/java/java0/nio01/netty/HttpHandler.java @@ -12,9 +12,10 @@ import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.client.methods.HttpGet; -import org.apache.http.HttpResponse; +import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.impl.client.HttpClients; +import java.io.IOException; import java.util.Scanner; import static io.netty.handler.codec.http.HttpHeaderNames.CONNECTION; @@ -52,6 +53,11 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) { private void handlerTest(FullHttpRequest fullRequest, ChannelHandlerContext ctx, String body) { FullHttpResponse response = null; + // 创建一个HttpClient对象 + CloseableHttpClient httpclient = HttpClients.createDefault(); + // 创建一个httpGet对象 + HttpGet httpget = new HttpGet("http://localhost:8801"); + CloseableHttpResponse httpresponse = null; try { String value = body; // 对接上次作业的httpclient或者okhttp请求另一个url的响应数据 @@ -59,11 +65,7 @@ private void handlerTest(FullHttpRequest fullRequest, ChannelHandlerContext ctx, // 返回的响应,"hello,nio"; // value = reponse.... // 第三周作业第一道 - // 创建一个HttpClient对象 - CloseableHttpClient httpclient = HttpClients.createDefault(); - // 创建一个httpGet对象 - HttpGet httpget = new HttpGet("http://localhost:8801"); - HttpResponse httpresponse = httpclient.execute(httpget); + httpresponse = httpclient.execute(httpget); Scanner sc = new Scanner(httpresponse.getEntity().getContent()); StringBuilder sb = new StringBuilder(); while (sc.hasNext()) { @@ -80,6 +82,15 @@ private void handlerTest(FullHttpRequest fullRequest, ChannelHandlerContext ctx, System.out.println("处理出错:"+e.getMessage()); response = new DefaultFullHttpResponse(HTTP_1_1, NO_CONTENT); } finally { + try { + if (httpresponse != null){ + httpresponse.close(); + } + httpget.releaseConnection(); + httpclient.close(); + } catch (IOException e) { + e.printStackTrace(); + } if (fullRequest != null) { if (!HttpUtil.isKeepAlive(fullRequest)) { ctx.write(response).addListener(ChannelFutureListener.CLOSE); From 2405e43e233f54fb585e86cde2e5d355f48cd6d7 Mon Sep 17 00:00:00 2001 From: lenon-lee Date: Fri, 4 Feb 2022 21:04:37 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E7=AC=AC=E4=B8=89=E5=91=A8=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A=E7=AC=AC=E4=B8=80=E9=81=9302Try?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 02nio/nio01/src/main/java/java0/nio01/netty/HttpHandler.java | 1 + 1 file changed, 1 insertion(+) diff --git a/02nio/nio01/src/main/java/java0/nio01/netty/HttpHandler.java b/02nio/nio01/src/main/java/java0/nio01/netty/HttpHandler.java index d28ea06f..5489a97b 100644 --- a/02nio/nio01/src/main/java/java0/nio01/netty/HttpHandler.java +++ b/02nio/nio01/src/main/java/java0/nio01/netty/HttpHandler.java @@ -59,6 +59,7 @@ private void handlerTest(FullHttpRequest fullRequest, ChannelHandlerContext ctx, HttpGet httpget = new HttpGet("http://localhost:8801"); CloseableHttpResponse httpresponse = null; try { + System.out.println("fullRequest.uri() = "+fullRequest.uri()); String value = body; // 对接上次作业的httpclient或者okhttp请求另一个url的响应数据 // httpGet ... http://localhost:8801 From 3d76b107c8cf9b141ae636260d38303bded1bc64 Mon Sep 17 00:00:00 2001 From: lenon-lee Date: Fri, 4 Feb 2022 21:39:05 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E7=AC=AC=E4=B8=89=E5=91=A8=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A=E6=AF=94=E5=81=9A=E7=AC=AC=E4=BA=8C=E9=81=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gateway/filter/CustomedHttpRequestFilter.java | 11 +++++++++++ .../gateway/filter/CustomedHttpResponseFilter.java | 10 ++++++++++ .../gateway/filter/HeaderHttpRequestFilter.java | 1 + .../gateway/filter/HeaderHttpResponseFilter.java | 1 + .../kimmking/gateway/inbound/HttpInboundHandler.java | 5 ++++- .../outbound/httpclient4/HttpOutboundHandler.java | 7 +++++-- 6 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/CustomedHttpRequestFilter.java create mode 100644 02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/CustomedHttpResponseFilter.java diff --git a/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/CustomedHttpRequestFilter.java b/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/CustomedHttpRequestFilter.java new file mode 100644 index 00000000..92fec60c --- /dev/null +++ b/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/CustomedHttpRequestFilter.java @@ -0,0 +1,11 @@ +package io.github.kimmking.gateway.filter; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.http.FullHttpRequest; + +public class CustomedHttpRequestFilter implements HttpRequestFilter{ + @Override + public void filter(FullHttpRequest fullRequest, ChannelHandlerContext ctx) { + fullRequest.headers().set("x-java", "lemon-lee-in"); + } +} diff --git a/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/CustomedHttpResponseFilter.java b/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/CustomedHttpResponseFilter.java new file mode 100644 index 00000000..622b4e2e --- /dev/null +++ b/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/CustomedHttpResponseFilter.java @@ -0,0 +1,10 @@ +package io.github.kimmking.gateway.filter; + +import io.netty.handler.codec.http.FullHttpResponse; + +public class CustomedHttpResponseFilter implements HttpResponseFilter{ + @Override + public void filter(FullHttpResponse response) { + response.headers().set("xy-java", "lemon-lee-out"); + } +} diff --git a/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/HeaderHttpRequestFilter.java b/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/HeaderHttpRequestFilter.java index af5c37fb..8289a821 100644 --- a/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/HeaderHttpRequestFilter.java +++ b/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/HeaderHttpRequestFilter.java @@ -8,5 +8,6 @@ public class HeaderHttpRequestFilter implements HttpRequestFilter { @Override public void filter(FullHttpRequest fullRequest, ChannelHandlerContext ctx) { fullRequest.headers().set("mao", "soul"); + fullRequest.headers().set("x-java", "lemon_lee"); } } diff --git a/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/HeaderHttpResponseFilter.java b/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/HeaderHttpResponseFilter.java index 53493fb4..2579e25d 100644 --- a/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/HeaderHttpResponseFilter.java +++ b/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/HeaderHttpResponseFilter.java @@ -6,5 +6,6 @@ public class HeaderHttpResponseFilter implements HttpResponseFilter { @Override public void filter(FullHttpResponse response) { response.headers().set("kk", "java-1-nio"); + response.headers().set("x-java", "lemon-lee"); } } diff --git a/02nio/nio02/src/main/java/io/github/kimmking/gateway/inbound/HttpInboundHandler.java b/02nio/nio02/src/main/java/io/github/kimmking/gateway/inbound/HttpInboundHandler.java index 69b40fde..321d4494 100644 --- a/02nio/nio02/src/main/java/io/github/kimmking/gateway/inbound/HttpInboundHandler.java +++ b/02nio/nio02/src/main/java/io/github/kimmking/gateway/inbound/HttpInboundHandler.java @@ -1,5 +1,6 @@ package io.github.kimmking.gateway.inbound; +import io.github.kimmking.gateway.filter.CustomedHttpRequestFilter; import io.github.kimmking.gateway.filter.HeaderHttpRequestFilter; import io.github.kimmking.gateway.filter.HttpRequestFilter; import io.github.kimmking.gateway.outbound.httpclient4.HttpOutboundHandler; @@ -18,6 +19,7 @@ public class HttpInboundHandler extends ChannelInboundHandlerAdapter { private final List proxyServer; private HttpOutboundHandler handler; private HttpRequestFilter filter = new HeaderHttpRequestFilter(); + private HttpRequestFilter filter01 = new CustomedHttpRequestFilter(); public HttpInboundHandler(List proxyServer) { this.proxyServer = proxyServer; @@ -40,7 +42,8 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) { // handlerTest(fullRequest, ctx); // } - handler.handle(fullRequest, ctx, filter); +// handler.handle(fullRequest, ctx, filter); + handler.handle(fullRequest, ctx, filter01); } catch(Exception e) { e.printStackTrace(); diff --git a/02nio/nio02/src/main/java/io/github/kimmking/gateway/outbound/httpclient4/HttpOutboundHandler.java b/02nio/nio02/src/main/java/io/github/kimmking/gateway/outbound/httpclient4/HttpOutboundHandler.java index c20c9be5..f42aad45 100644 --- a/02nio/nio02/src/main/java/io/github/kimmking/gateway/outbound/httpclient4/HttpOutboundHandler.java +++ b/02nio/nio02/src/main/java/io/github/kimmking/gateway/outbound/httpclient4/HttpOutboundHandler.java @@ -1,6 +1,7 @@ package io.github.kimmking.gateway.outbound.httpclient4; +import io.github.kimmking.gateway.filter.CustomedHttpResponseFilter; import io.github.kimmking.gateway.filter.HeaderHttpResponseFilter; import io.github.kimmking.gateway.filter.HttpRequestFilter; import io.github.kimmking.gateway.filter.HttpResponseFilter; @@ -38,7 +39,8 @@ public class HttpOutboundHandler { private ExecutorService proxyService; private List backendUrls; - HttpResponseFilter filter = new HeaderHttpResponseFilter(); +// HttpResponseFilter filter = new HeaderHttpResponseFilter(); + HttpResponseFilter filter = new CustomedHttpResponseFilter(); HttpEndpointRouter router = new RandomHttpEndpointRouter(); public HttpOutboundHandler(List backends) { @@ -83,7 +85,8 @@ private void fetchGet(final FullHttpRequest inbound, final ChannelHandlerContext final HttpGet httpGet = new HttpGet(url); //httpGet.setHeader(HTTP.CONN_DIRECTIVE, HTTP.CONN_CLOSE); httpGet.setHeader(HTTP.CONN_DIRECTIVE, HTTP.CONN_KEEP_ALIVE); - httpGet.setHeader("mao", inbound.headers().get("mao")); +// httpGet.setHeader("mao", inbound.headers().get("mao")); + httpGet.setHeader("x=java", inbound.headers().get("x-java")); httpclient.execute(httpGet, new FutureCallback() { @Override From 37059b5251afcbf13dfb4db899ce1f9307ddbf9e Mon Sep 17 00:00:00 2001 From: lenon-lee Date: Sun, 27 Feb 2022 17:28:53 +0800 Subject: [PATCH 5/5] =?UTF-8?q?0501=E4=BD=9C=E4=B8=9A=EF=BC=8C=E5=86=99?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=AE=9E=E7=8E=B0=20Spring=20Bean=20?= =?UTF-8?q?=E7=9A=84=E8=A3=85=E9=85=8D=201=E3=80=81=E5=9C=A8applicationCon?= =?UTF-8?q?text.xml=E4=B8=AD=E4=BD=BF=E7=94=A8xml=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=20bean=20=3D=20faculty2040=202=E3=80=81?= =?UTF-8?q?=E5=9C=A8applicationContext.xml=E4=B8=AD=E4=BD=BF=E7=94=A8xml?= =?UTF-8?q?=E6=96=B9=E5=BC=8F=E9=85=8D=E7=BD=AE=20bean=20=3D=20faculty2080?= =?UTF-8?q?=EF=BC=8C=E4=BD=BF=E7=94=A8@Resource=E6=B3=A8=E8=A7=A3=E6=B3=A8?= =?UTF-8?q?=E5=85=A5=E5=88=B0Klass=E5=AE=9E=E4=BE=8B(=E7=9B=AE=E5=89=8D?= =?UTF-8?q?=E6=98=AFclass1)=E7=9A=84=E5=B1=9E=E6=80=A7teacher2080=E4=B8=AD?= =?UTF-8?q?=203=E3=80=81=E4=BD=BF=E7=94=A8@Bean=E8=AF=B4=E6=98=8Ecreate()?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E7=9A=84=E6=98=AF=E4=B8=80=E4=B8=AAbean?= =?UTF-8?q?=EF=BC=8C=E5=B9=B6(=E5=9C=A8SpringDemo01=E7=9A=84main()?= =?UTF-8?q?=E4=B8=AD)=E8=B0=83=E7=94=A8create()=20HelloBeanDefinitionRegis?= =?UTF-8?q?tryPostProcessor=E4=B8=AD=E4=B9=9F=E5=8F=AF=E4=BB=A5=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E4=B8=8D=E5=90=AB@Bean=E6=B3=A8=E8=A7=A3=E7=9A=84Crea?= =?UTF-8?q?te()=E6=96=B9=E6=B3=95=EF=BC=8C=E4=BD=86=E9=9C=80=E8=A6=81?= =?UTF-8?q?=EF=BC=9A=203.1=E3=80=81=E8=B0=83=E7=94=A8registry.registerBean?= =?UTF-8?q?Definition()=E5=8A=A0=E5=85=A5=E5=88=B0context=E4=B8=AD=203.2?= =?UTF-8?q?=E3=80=81=E8=B0=83=E7=94=A8beanFactory.registerSingleton()?= =?UTF-8?q?=E5=8A=A0=E5=85=A5=E5=88=B0context=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/java0/conc0301/op/Join.java | 4 +- .../java/java0/conc0301/op/WaitAndNotify.java | 8 +- .../main/java/java0/conc0303/Homework03.java | 141 ++++++++++++++++-- .../java/io/kimmking/spring01/Faculty.java | 44 ++++++ .../java/io/kimmking/spring01/Student.java | 2 +- .../main/java/io/kimmking/spring02/Klass.java | 12 +- .../java/io/kimmking/spring02/School.java | 11 +- .../io/kimmking/spring02/SpringDemo01.java | 18 ++- .../src/main/resources/applicationContext.xml | 19 +++ 9 files changed, 239 insertions(+), 20 deletions(-) create mode 100644 04fx/spring01/src/main/java/io/kimmking/spring01/Faculty.java diff --git a/03concurrency/0301/src/main/java/java0/conc0301/op/Join.java b/03concurrency/0301/src/main/java/java0/conc0301/op/Join.java index 1cbf6a5a..22080bb4 100644 --- a/03concurrency/0301/src/main/java/java0/conc0301/op/Join.java +++ b/03concurrency/0301/src/main/java/java0/conc0301/op/Join.java @@ -15,7 +15,7 @@ public static void main(String[] args) { if (i == 20) { try { oo.wait(0); - //thread1.join(); +// thread1.join(); } catch (InterruptedException e) { e.printStackTrace(); } @@ -46,6 +46,8 @@ public void run() { for (int i = 0; i < 100; i++) { System.out.println(name + i); } + // with synchronized(oo) and oo.wait(), run as wish using the next line. + oo.notifyAll(); } } diff --git a/03concurrency/0301/src/main/java/java0/conc0301/op/WaitAndNotify.java b/03concurrency/0301/src/main/java/java0/conc0301/op/WaitAndNotify.java index e3956c10..c72459ce 100644 --- a/03concurrency/0301/src/main/java/java0/conc0301/op/WaitAndNotify.java +++ b/03concurrency/0301/src/main/java/java0/conc0301/op/WaitAndNotify.java @@ -3,6 +3,7 @@ public class WaitAndNotify { public static void main(String[] args) { MethodClass methodClass = new MethodClass(); + MethodKlass methodKlass = new MethodKlass(); Thread t1 = new Thread(() -> { try { methodClass.product(); @@ -13,7 +14,7 @@ public static void main(String[] args) { }, "t1"); Thread t2 = new Thread(() -> { try { - methodClass.customer(); + methodKlass.customer(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -46,7 +47,7 @@ public synchronized void product() throws InterruptedException { Thread.sleep(10); if (productCount >= MAX_COUNT) { System.out.println("货舱已满,,.不必再生产"); - + wait(); }else { productCount++; @@ -70,4 +71,7 @@ public synchronized void customer() throws InterruptedException { notifyAll(); } } +} +class MethodKlass extends MethodClass { + } \ No newline at end of file diff --git a/03concurrency/0301/src/main/java/java0/conc0303/Homework03.java b/03concurrency/0301/src/main/java/java0/conc0303/Homework03.java index f9a6eb20..c8e3193b 100644 --- a/03concurrency/0301/src/main/java/java0/conc0303/Homework03.java +++ b/03concurrency/0301/src/main/java/java0/conc0303/Homework03.java @@ -1,6 +1,7 @@ package java0.conc0303; -import java.util.concurrent.CountDownLatch; +import java.util.concurrent.*; +import java.lang.reflect.*; /** * 本周作业:(必做)思考有多少种方式,在main函数启动一个新线程或线程池, @@ -10,21 +11,111 @@ * 一个简单的代码参考: */ public class Homework03 { - +// static CountDownLatch countDownLatch = new CountDownLatch(1); + public static void main(String[] args) { - - long start=System.currentTimeMillis(); - // 在这里创建一个线程或线程池, + long start = System.currentTimeMillis(); + + // 在这里创建一个线程或线程池 +// ExecutorService service = Executors.newSingleThreadExecutor(); + ExecutorService service = Executors.newCachedThreadPool(); // 异步执行 下面方法 - - int result = sum(); //这是得到的返回值 - - // 确保 拿到result 并输出 - System.out.println("异步计算结果为:"+result); - + // 1. FutureTask + FutureTask futureTask = new FutureTask(() -> sum()); + service.submit(futureTask); + try { + int result = futureTask.get().intValue(); + +// int result = sum(); //这是得到的返回值 + + // 确保 拿到result 并输出 + System.out.println("1 : FutureTask异步计算结果为:" + result); + System.out.println("使用时间:" + (System.currentTimeMillis() - start) + " ms"); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + + // 2. Callable + Future + Future future = service.submit(() -> sum()); + try { + int result = (Integer) future.get(); + + // 确保 拿到result 并输出 + System.out.println("2 : Future + Callable异步计算结果为:" + result); + System.out.println("使用时间:" + (System.currentTimeMillis() - start) + " ms"); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } finally { + // 关闭cached线程池, 以便结束JVM进程, 否则需要60秒空闲才能没有线程 + service.shutdown(); + } + + // 3. Thread + Future + Callable + ComputeThread task3 = new ComputeThread(); + FutureTask futureTask3 = new FutureTask<>(task3); + new Thread(futureTask3).start(); + try { + int result = (Integer)futureTask3.get(); + + // 确保 拿到result 并输出 + System.out.println("3 : Thread + FutureTask + Callable异步计算结果为:"+result); + System.out.println("使用时间:"+ (System.currentTimeMillis()-start) + " ms"); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + + // 4. Thread + FutureTask + Callable + join() + ComputeThread task4 = new ComputeThread(); + FutureTask futureTask4 = new FutureTask<>(task4); + Thread thread = new Thread(futureTask4); + try { + thread.start(); + thread.join(); + int result = (Integer)futureTask4.get(); + + // 确保 拿到result 并输出 + System.out.println("4 : Thread + FutureTask + Callable + join()异步计算结果为:"+result); + System.out.println("使用时间:"+ (System.currentTimeMillis()-start) + " ms"); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + + // 5. CompletableFuture.get() + Callable +// CountDownLatch countDownLatch = new CountDownLatch(1); + CompletableFuture cfSum = CompletableFuture.supplyAsync(()-> { + int result = sum(); +// countDownLatch.countDown(); + return result; + }); + try { + int result = cfSum.get(); + cfSum.complete(100); + System.out.println("5 : CompletableFuture.get() + Callable异步计算结果为:"+result); + System.out.println("使用时间:"+ (System.currentTimeMillis()-start) + " ms"); +// countDownLatch.await(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + + // 6. CompletableFuture.join() + Callable + CompletableFuture cfSum6 = CompletableFuture.supplyAsync(()-> { + int result = sum(); + return result; + }); + int result = cfSum6.join(); + System.out.println("6 : CompletableFuture.join() + Callable异步计算结果为:"+result); System.out.println("使用时间:"+ (System.currentTimeMillis()-start) + " ms"); - // 然后退出main线程 } @@ -37,4 +128,30 @@ private static int fibo(int a) { return 1; return fibo(a-1) + fibo(a-2); } + +} + +class ComputeThread implements Callable { + @Override + public Integer call() throws Exception { + Method method1 = Homework03.class.getDeclaredMethod("sum"); + method1.setAccessible(true); + Integer res = (Integer)method1.invoke(null); + return res.intValue(); + } } + +class ComputeTask implements Callable { + private CountDownLatch countDownLatch; + public ComputeTask(CountDownLatch countDownLatch) { + this.countDownLatch = countDownLatch; + } + @Override + public Integer call() throws Exception { + Method method1 = Homework03.class.getDeclaredMethod("sum"); + method1.setAccessible(true); + Integer res = (Integer)method1.invoke(null); + countDownLatch.countDown(); + return res.intValue(); + } +} \ No newline at end of file diff --git a/04fx/spring01/src/main/java/io/kimmking/spring01/Faculty.java b/04fx/spring01/src/main/java/io/kimmking/spring01/Faculty.java new file mode 100644 index 00000000..12cab37f --- /dev/null +++ b/04fx/spring01/src/main/java/io/kimmking/spring01/Faculty.java @@ -0,0 +1,44 @@ +package io.kimmking.spring01; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; +import org.springframework.beans.factory.BeanNameAware; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Bean; + +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class Faculty implements Serializable, BeanNameAware, ApplicationContextAware { + private int id; + private String name; + + private String beanName; + private ApplicationContext applicationContext; + + public void init(){ + System.out.println("hello..., this is a faculty"); + } + + // 3、使用@Bean说明create()返回的是一个bean,并(在SpringDemo01的main()中)调用create() + // HelloBeanDefinitionRegistryPostProcessor中也可以调用不含@Bean注解的Create()方法,但需要: + // 3.1、调用registry.registerBeanDefinition()加入到context中 + // 3.2、调用beanFactory.registerSingleton()加入到context中 + @Bean + public static Faculty create(){ + return new Faculty(1020,"Faculty1020","Faculty === POJO", null); + } + + public void print() { + System.out.println(this.beanName); + System.out.println(" context.getBeanDefinitionNames() ===>> " + + String.join(",", applicationContext.getBeanDefinitionNames())); + + } +} diff --git a/04fx/spring01/src/main/java/io/kimmking/spring01/Student.java b/04fx/spring01/src/main/java/io/kimmking/spring01/Student.java index a2357bf6..73235391 100644 --- a/04fx/spring01/src/main/java/io/kimmking/spring01/Student.java +++ b/04fx/spring01/src/main/java/io/kimmking/spring01/Student.java @@ -27,7 +27,7 @@ public class Student implements Serializable, BeanNameAware, ApplicationContextA private ApplicationContext applicationContext; public void init(){ - System.out.println("hello..........."); + System.out.println("hello...Student........"); } public static Student create(){ diff --git a/04fx/spring01/src/main/java/io/kimmking/spring02/Klass.java b/04fx/spring01/src/main/java/io/kimmking/spring02/Klass.java index 65268a7a..89ee75b4 100644 --- a/04fx/spring01/src/main/java/io/kimmking/spring02/Klass.java +++ b/04fx/spring01/src/main/java/io/kimmking/spring02/Klass.java @@ -1,15 +1,25 @@ package io.kimmking.spring02; +import io.kimmking.spring01.Faculty; import io.kimmking.spring01.Student; import lombok.Data; +import javax.annotation.Resource; import java.util.List; @Data public class Klass { List students; - + + // 1、xml方式配置 bean = faculty2040,并装入bean = class1 的属性teacher中 + Faculty teacher; + + // 2、xml方式配置 bean = faculty2080,使用@Resource注解注入到Klass实例(目前是class1)的属性teacher2080中 + @Resource(name = "faculty2080") + Faculty teacher2080; + + public void dong(){ System.out.println(this.getStudents()); } diff --git a/04fx/spring01/src/main/java/io/kimmking/spring02/School.java b/04fx/spring01/src/main/java/io/kimmking/spring02/School.java index 7c700e64..1155e920 100644 --- a/04fx/spring01/src/main/java/io/kimmking/spring02/School.java +++ b/04fx/spring01/src/main/java/io/kimmking/spring02/School.java @@ -1,6 +1,7 @@ package io.kimmking.spring02; import io.kimmking.aop.ISchool; +import io.kimmking.spring01.Faculty; import io.kimmking.spring01.Student; import lombok.Data; import org.springframework.beans.factory.annotation.Autowired; @@ -16,11 +17,17 @@ public class School implements ISchool { @Resource(name = "student100") Student student100; - + + @Resource(name = "student123") + Student student123; + + @Resource(name = "faculty2040") + Faculty faculty2040; + @Override public void ding(){ - System.out.println("Class1 have " + this.class1.getStudents().size() + " students and one is " + this.student100); + System.out.println("Class1 have " + this.class1.getStudents().size() + " students and one is " + this.student100 + "."); } diff --git a/04fx/spring01/src/main/java/io/kimmking/spring02/SpringDemo01.java b/04fx/spring01/src/main/java/io/kimmking/spring02/SpringDemo01.java index a6263369..c97036ac 100644 --- a/04fx/spring01/src/main/java/io/kimmking/spring02/SpringDemo01.java +++ b/04fx/spring01/src/main/java/io/kimmking/spring02/SpringDemo01.java @@ -1,6 +1,7 @@ package io.kimmking.spring02; import io.kimmking.aop.ISchool; +import io.kimmking.spring01.Faculty; import io.kimmking.spring01.Student; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; @@ -10,7 +11,8 @@ public class SpringDemo01 { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); -// Student student123 = context.getBean(Student.class); + Student student101 = (Student)context.getBean("s101"); + System.out.println(student101.toString()); Student student123 = (Student) context.getBean("student123"); System.out.println(student123.toString()); @@ -49,5 +51,19 @@ public static void main(String[] args) { if (s102 != null) { System.out.println(s102); } +// Student s108 = (Student) context.getBean("s108"); +// if (s102 != null) { +// System.out.println(s108); +// } + + + // 3、使用@Bean说明create()返回的是一个bean,并(在SpringDemo01的main()中)调用create() + // HelloBeanDefinitionRegistryPostProcessor中也可以调用不含@Bean注解的Create()方法,但需要: + // 3.1、调用registry.registerBeanDefinition()加入到context中 + // 3.2、调用beanFactory.registerSingleton()加入到context中 + Faculty f1020 = Faculty.create(); + if (f1020 != null) { + System.out.println(f1020); + } } } diff --git a/04fx/spring01/src/main/resources/applicationContext.xml b/04fx/spring01/src/main/resources/applicationContext.xml index 681cf409..b47617b9 100644 --- a/04fx/spring01/src/main/resources/applicationContext.xml +++ b/04fx/spring01/src/main/resources/applicationContext.xml @@ -19,6 +19,20 @@ + + + + + + + + + + + + @@ -31,6 +45,11 @@ + + + + +