From 8138c54563053873b2431e5469b7c9b543d614af Mon Sep 17 00:00:00 2001 From: sky5454 Date: Wed, 31 Jul 2019 20:47:18 +0800 Subject: [PATCH 1/4] Update 10-Component-Scan.md --- source/10-Component-Scan.md | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/source/10-Component-Scan.md b/source/10-Component-Scan.md index faba1f8..03ec05a 100644 --- a/source/10-Component-Scan.md +++ b/source/10-Component-Scan.md @@ -19,13 +19,16 @@ ``` ->注意我们去掉了所有的 Bean 定义,也同时去掉了 ``,因为 `` 默认就会打开 ``,因此不需要再手动设置 ``。 +>注意我们去掉了所有的 Bean 定义,也同时去掉了 `` +>因为 `` 默认就会打开 ``,因此不需再手动设置 ### Component -Spring 中定义了若干用于注册 Bean 的 Annotation,包括 `@Component` 以及继承自 `@Component` 的 `@Service` 和 `@Repository`。所谓的 component-scan 也就是告诉 Spring 去扫描标示了这些 Annotation 的类,将它们用于 Bean 的注册。 Spring 中推荐使用 `@Service` 和 `@Component` 标示逻辑和服务层的组件,使用 `@Repository` 标示持久层的组件。 +Spring 中定义了若干用于注册 Bean 的 Annotation,包括 `@Component` 以及继承自 `@Component` 的 `@Service` 和 `@Repository`。 +所谓的 component-scan 也就是告诉 Spring 去扫描标示了这些 Annotation 的类,将它们用于 Bean 的注册。 +Spring 中推荐使用 `@Service` 和 `@Component` 标示逻辑和服务层的组件,使用 `@Repository` 标示持久层的组件。 ->`@Service` 和 `@Repository` 都继承自 `@Component`,因此在 Bean 注册的层面,它们没有本质上的区别,不过 `@Repository` 在持久层会有一个 exception 转换的作用,这里先略去不讲。 +>`@Service` 和 `@Repository` 都继承自 `@Component`,因此在 Bean 注册的层面,它们没有本质上的区别。不过 `@Repository` 在持久层会有一个 exception 转换的作用,这里先略去不讲。 创建一个新类 MyPersonComponent: @@ -55,8 +58,22 @@ public class MyPersonComponent { } ``` -可以看到,我们基本就是把原先在 XML 当中的配置,挪到了 Java 代码当中。运行代码,得到和之前一样的结果 +可见,我们其实就是把原先在 XML 当中的配置,挪到了 Java 代码里。运行代码,得到的结果和之前一样。 >注意到我们的 `MyServiceImpl` 仅仅设置了 greeting,为什么这样就能够正常工作呢?还记得上一节的 `@Autowired` 吗,它依然在发挥自己的作用,帮我们找到了 Person 的实例,并且赋给了 `MyServiceImpl`。 +
+小结一下: +> 其实这里的 `MyPersonComponent` 和之前三个 "依赖注入(DI)" 的类是完全不一样的 +> 对比一下,你会发现前三种DI都是有 sayHello()方法的,而这里的 `MyPersonComponent` 只是代替了 XML 的部分工作,本身并没有 sayHello方法。 + + - 这里的 `MyPersonComponent` 用处:生成`MyServiceImpl` 的Bean对象,代替了 XML 的绝大部分工作,该类本身是和`MyServiceImpl`无关的(没有继承) + - 而之前的三种 依赖注入(DI) 方式都是通过 XML 来生成 `MyServiceImpl` 的Bean对象,类运行时就是 Bean 对象 + + ```Java + Main函数中的例子(命名稍微改动,请变通): + ApplicationContext ComponentContext = new ClassPathXmlApplicationContext("Component-scan.xml"); + MyServiceImpl service = ComponentContext.getBean("myService", MyServiceImpl.class); + System.out.println(service.sayHello()); + ``` From fa1db18afbfd585a735cb99a08357eb9c2d09a2e Mon Sep 17 00:00:00 2001 From: sky5454 Date: Wed, 31 Jul 2019 20:49:00 +0800 Subject: [PATCH 2/4] Update 10-Component-Scan.md --- source/10-Component-Scan.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/10-Component-Scan.md b/source/10-Component-Scan.md index 03ec05a..fc82953 100644 --- a/source/10-Component-Scan.md +++ b/source/10-Component-Scan.md @@ -58,13 +58,13 @@ public class MyPersonComponent { } ``` -可见,我们其实就是把原先在 XML 当中的配置,挪到了 Java 代码里。运行代码,得到的结果和之前一样。 +可见,我们其实就是把原先在 XML 当中的配置,挪到了 Java 代码里。运行代码,得到的结果和之前一样。 ->注意到我们的 `MyServiceImpl` 仅仅设置了 greeting,为什么这样就能够正常工作呢?还记得上一节的 `@Autowired` 吗,它依然在发挥自己的作用,帮我们找到了 Person 的实例,并且赋给了 `MyServiceImpl`。 +>注意到我们的 `MyServiceImpl` 仅仅设置了 greeting,为什么这样就能够正常工作呢?还记得上一节的 `@Autowired` 吗,它依然在发挥自己的作用,帮我们找到了 Person 的实例,并且赋给了 `MyServiceImpl`。
-小结一下: +小结一下: > 其实这里的 `MyPersonComponent` 和之前三个 "依赖注入(DI)" 的类是完全不一样的 > 对比一下,你会发现前三种DI都是有 sayHello()方法的,而这里的 `MyPersonComponent` 只是代替了 XML 的部分工作,本身并没有 sayHello方法。 From 7760f30818550f6888600b28c1791cd33cc35bca Mon Sep 17 00:00:00 2001 From: sky5454 Date: Thu, 1 Aug 2019 11:12:50 +0800 Subject: [PATCH 3/4] Update 10-Component-Scan.md --- source/10-Component-Scan.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/source/10-Component-Scan.md b/source/10-Component-Scan.md index fc82953..269a1ec 100644 --- a/source/10-Component-Scan.md +++ b/source/10-Component-Scan.md @@ -68,11 +68,12 @@ public class MyPersonComponent { > 其实这里的 `MyPersonComponent` 和之前三个 "依赖注入(DI)" 的类是完全不一样的 > 对比一下,你会发现前三种DI都是有 sayHello()方法的,而这里的 `MyPersonComponent` 只是代替了 XML 的部分工作,本身并没有 sayHello方法。 - - 这里的 `MyPersonComponent` 用处:生成`MyServiceImpl` 的Bean对象,代替了 XML 的绝大部分工作,该类本身是和`MyServiceImpl`无关的(没有继承) - - 而之前的三种 依赖注入(DI) 方式都是通过 XML 来生成 `MyServiceImpl` 的Bean对象,类运行时就是 Bean 对象 - + - 之前的三种 依赖注入(DI) 方式的实现都是: 由 Spring 容器通过 XML 来生成 `MyServiceImpl` 类的Bean对象(类本身就是 Spring 容器操作的对象) + - 而这里的 `MyPersonComponent` 类只是用来生成`MyServiceImpl` 的Bean对象,它是代替了 XML 的绝大部分工作(这个类本身和`MyServiceImpl`是没有继承关系,所以也没有 sayHello方法) + + **本节代码示例** ```Java - Main函数中的例子(命名稍微改动,请变通): + 写在Main函数里(命名稍微改动,请变通): ApplicationContext ComponentContext = new ClassPathXmlApplicationContext("Component-scan.xml"); MyServiceImpl service = ComponentContext.getBean("myService", MyServiceImpl.class); System.out.println(service.sayHello()); From 848bd56acd76d4aae30bea8f9cd3fb2998e7b19f Mon Sep 17 00:00:00 2001 From: sky5454 Date: Fri, 2 Aug 2019 09:56:27 +0800 Subject: [PATCH 4/4] Update 10-Component-Scan.md --- source/10-Component-Scan.md | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/source/10-Component-Scan.md b/source/10-Component-Scan.md index 269a1ec..3278fb1 100644 --- a/source/10-Component-Scan.md +++ b/source/10-Component-Scan.md @@ -69,12 +69,4 @@ public class MyPersonComponent { > 对比一下,你会发现前三种DI都是有 sayHello()方法的,而这里的 `MyPersonComponent` 只是代替了 XML 的部分工作,本身并没有 sayHello方法。 - 之前的三种 依赖注入(DI) 方式的实现都是: 由 Spring 容器通过 XML 来生成 `MyServiceImpl` 类的Bean对象(类本身就是 Spring 容器操作的对象) - - 而这里的 `MyPersonComponent` 类只是用来生成`MyServiceImpl` 的Bean对象,它是代替了 XML 的绝大部分工作(这个类本身和`MyServiceImpl`是没有继承关系,所以也没有 sayHello方法) - - **本节代码示例** - ```Java - 写在Main函数里(命名稍微改动,请变通): - ApplicationContext ComponentContext = new ClassPathXmlApplicationContext("Component-scan.xml"); - MyServiceImpl service = ComponentContext.getBean("myService", MyServiceImpl.class); - System.out.println(service.sayHello()); - ``` + - 而这里的 `MyPersonComponent` 类只是用来生成`MyServiceImpl` 的Bean对象,它是代替了 XML 的绝大部分工作(这个类是没有 sayHello方法的)