Skip to content

Commit b55ee4a

Browse files
author
anaer
authored
Update Spring常见问题总结.md
1 parent a5ce875 commit b55ee4a

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

docs/system-design/framework/spring/Spring常见问题总结.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,9 @@ Spring 时代我们一般通过 XML 文件来配置 Bean,后来开发人员觉
9494

9595
### 谈谈自己对于 AOP 的了解
9696

97-
AOP(Aspect-Oriented Programming:面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码****降低模块间的耦合度,并有利于未来的可拓展性和可维护性。
97+
AOP(Aspect-Oriented Programming:面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码降低模块间的耦合度,并有利于未来的可拓展性和可维护性。
9898

99-
Spring AOP 就是基于动态代理的,如果要代理的对象,实现了某个接口,那么 Spring AOP 会使用 **JDK Proxy**,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候 Spring AOP 会使用 **Cglib** ,这时候 Spring AOP 会使用 **Cglib** 生成一个被代理对象的子类来作为代理,如下图所示:
99+
Spring AOP 就是基于动态代理的,如果要代理的对象,实现了某个接口,那么 Spring AOP 会使用 **JDK Proxy**,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候 Spring AOP 会使用 **Cglib** 生成一个被代理对象的子类来作为代理,如下图所示:
100100

101101
![SpringAOPProcess](https://images.xiaozhuanlan.com/photo/2019/926dfc549b06d280a37397f9fd49bf9d.jpg)
102102

@@ -116,7 +116,7 @@ Spring AOP 已经集成了 AspectJ ,AspectJ 应该算的上是 Java 生态系
116116

117117
简单来说,bean 代指的就是那些被 IoC 容器所管理的对象。
118118

119-
我们需要告诉 IoC 容器帮助我们管理哪些对象,这个是通过配置元数据的定义的。配置元数据可以是 XML 文件、注解或者 Java 配置类。
119+
我们需要告诉 IoC 容器帮助我们管理哪些对象,这个是通过配置元数据来定义的。配置元数据可以是 XML 文件、注解或者 Java 配置类。
120120

121121
```xml
122122
<!-- Constructor-arg with 'value' attribute -->
@@ -133,7 +133,7 @@ Spring AOP 已经集成了 AspectJ ,AspectJ 应该算的上是 Java 生态系
133133

134134
### bean 的作用域有哪些?
135135

136-
Spring 中 Bean 的作用域通常由下面几种
136+
Spring 中 Bean 的作用域通常有下面几种
137137

138138
- **singleton** : 唯一 bean 实例,Spring 中的 bean 默认都是单例的,对单例设计模式的应用。
139139
- **prototype** : 每次请求都会创建一个新的 bean 实例。
@@ -173,8 +173,8 @@ public Person personPrototype() {
173173
### @Component@Bean 的区别是什么?
174174

175175
1. `@Component` 注解作用于类,而`@Bean`注解作用于方法。
176-
2. `@Component`通常是通过类路径扫描来自动侦测以及自动装配到 Spring 容器中(我们可以使用 `@ComponentScan` 注解定义要扫描的路径从中找出标识了需要装配的类自动装配到 Spring 的 bean 容器中)。`@Bean` 注解通常是我们在标有该注解的方法中定义产生这个 bean,`@Bean`告诉了 Spring 这是某个类的示例,当我需要用它的时候还给我。
177-
3. `@Bean` 注解比 `Component` 注解的自定义性更强,而且很多地方我们只能通过 `@Bean` 注解来注册 bean。比如当我们引用第三方库中的类需要装配到 `Spring`容器时,则只能通过 `@Bean`来实现。
176+
2. `@Component`通常是通过类路径扫描来自动侦测以及自动装配到 Spring 容器中(我们可以使用 `@ComponentScan` 注解定义要扫描的路径从中找出标识了需要装配的类自动装配到 Spring 的 bean 容器中)。`@Bean` 注解通常是我们在标有该注解的方法中定义产生这个 bean,`@Bean`告诉了 Spring 这是某个类的实例,当我需要用它的时候还给我。
177+
3. `@Bean` 注解比 `@Component` 注解的自定义性更强,而且很多地方我们只能通过 `@Bean` 注解来注册 bean。比如当我们引用第三方库中的类需要装配到 `Spring`容器时,则只能通过 `@Bean`来实现。
178178

179179
`@Bean`注解使用示例:
180180

@@ -407,16 +407,16 @@ public enum Isolation {
407407

408408
`@Transactional` 注解作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。如果类或者方法加了这个注解,那么这个类里面的方法抛出异常,就会回滚,数据库里面的数据也会回滚。
409409

410-
`@Transactional` 注解中如果不配置`rollbackFor`属性,那么事物只会在遇到`RuntimeException`的时候才会回滚,加上 `rollbackFor=Exception.class`,可以让事物在遇到非运行时异常时也回滚
410+
`@Transactional` 注解中如果不配置`rollbackFor`属性,那么事务只会在遇到`RuntimeException`的时候才会回滚,加上 `rollbackFor=Exception.class`,可以让事务在遇到非运行时异常时也回滚
411411

412412
## JPA
413413

414414
### 如何使用 JPA 在数据库中非持久化一个字段?
415415

416-
假如我们有有下面一个类
416+
假如我们有下面一个类
417417

418418
```java
419-
Entity(name="USER")
419+
@Entity(name="USER")
420420
public class User {
421421

422422
@Id
@@ -439,7 +439,7 @@ public class User {
439439

440440
```java
441441
static String transient1; // not persistent because of static
442-
final String transient2 = Satish; // not persistent because of final
442+
final String transient2 = "Satish"; // not persistent because of final
443443
transient String transient3; // not persistent because of transient
444444
@Transient
445445
String transient4; // not persistent because of @Transient

0 commit comments

Comments
 (0)