1.1. 基础

1.1.1. IOC原理

概念

Spring 通过一个配置文件描述 Bean 及 Bean 之间的依赖关系,利用 Java 语言的反射功能实例化 Bean 并建立 Bean 之间的依赖关系。 Spring 的 IoC 容器在完成这些底层工作的基础上,还提供了 Bean 实例缓存、生命周期管理、 Bean 实例代理、事件发布、资源装载等高级服务。

高层视图

Spring 通过一个配置文件描述 Bean 及 Bean 之间的依赖关系,利用 Java 语言的反射功能实例化 Bean 并建立 Bean 之间的依赖关系。 Spring 的 IoC 容器在完成这些底层工作的基础上,还提供了 Bean 实例缓存、生命周期管理、 Bean 实例代理、事件发布、资源装载等高级服务。

Spring Bean 作用域

定义了 5 中作用域, 分别为 singleton(单例)、 prototype(原型)、request、 session 和 global session, 5 种作用域说明如下:

  • singleton:单例模式(多线程下不安全) Spring IoC 容器中只会存在一个共享的 Bean 实例,无论有多少个Bean 引用它,始终指向同一对象。 该模式在多线程下是不安全的。 Singleton 作用域是Spring 中的缺省作用域,也可以显示的将 Bean 定义为 singleton 模式,配置为:<bean id="userDao" class="com.ioc.UserDaoImpl" scope="singleton"/>

  • prototype:原型模式每次使用时创建

    每次通过 Spring 容器获取 prototype 定义的 bean 时,容器都将创建一个新的 Bean 实例,每个 Bean 实例都有自己的属性和状态,而 singleton 全局只有一个对象。根据经验, 对有状态的bean使用prototype作用域,而对无状态的bean使用singleton作用域。

  • Request:一次 request 一个实例

    在一次 Http 请求中,容器会返回该 Bean 的同一实例。而对不同的 Http 请求则会产生新的 Bean,而且该 bean 仅在当前 Http Request 内有效,当前 Http 请求结束,该 bean实例也将会被销毁。<bean id="loginAction" class="com.cnblogs.Login" scope="request"/>

  • Session :

    在一次 Http Session 中,容器会返回该 Bean 的同一实例。而对不同的 Session 请求则会创建新的实例,该 bean 实例仅在当前 Session 内有效。 同 Http 请求相同,每一次session 请求创建新的实例,而不同的实例之间不共享属性,且实例仅在自己的 session 请求内有效,请求结束,则实例将被销毁。<bean id="userPreference" class="com.ioc.UserPreference" scope="session"/>

  • global Session :

    在一个全局的 Http Session 中,容器会返回该 Bean 的同一个实例,仅在使用 portlet context 时有效。

依赖注入4种:

  • 构造器注入
  • setter注入
  • 静态工厂注入
  • 实例工厂注入

1.1.2. AOP原理

概念

"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。 使用"横切"技术, AOP 把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似, 比如权限认证、日志、事物。 AOP 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。

1.1.3. MVC原理

1.1.4. 基本特性与原理

1.1.5. RestController

1.1.6. Spring IOC与AOP的理解

1.1.7. IOC与DI的区别

1.1.8. SpringMVC常用注解有哪些?

1.1.9. 文件上传

1.1.10. JPA

@Entity:表示该类是一个实体类,在项目启动时会自动生成一张表,表的名称为@Entity注解中name值,如果不配置name,默认为类名。

@Id:表示该属性的一个主键,

@GeneratedValue:表示逐渐自动生成,strategy表示主键的生成策略。

@Column:可以定制生成的字段的属性 , name 表示该属性对应的数据表中字段的名称, nullable 表示该字段非空 。 默认情况下,生成的表中字段的名称就是实体类中属性的名称。 @Transient 注解表示在生成数据库中的表时,该属性被忽略,即不生成对应的字段。

1.1.11. Lombok代码

@Data:注解在类上,将类提供的所有属性都添加get、set方法,并添加、equals、canEqual、hashCode、toString方法 @Setter:注解在类上,为所有属性添加set方法、注解在属性上为该属性提供set方法 @Getter:注解在类上,为所有的属性添加get方法、注解在属性上为该属性提供get方法 @NotNull:在参数中使用时,如果调用时传了null值,就会抛出空指针异常 @Synchronized 用于方法,可以锁定指定的对象,如果不指定,则默认创建一个对象锁定 @Log作用于类,创建一个log属性 @Builder:使用builder模式创建对象 @NoArgsConstructor:创建一个无参构造函数 @AllArgsConstructor:创建一个全参构造函数 @ToStirng:创建一个toString方法 @Accessors(chain = true)使用链式设置属性,set方法返回的是this对象。 @RequiredArgsConstructor:创建对象 @UtilityClass:工具类 @ExtensionMethod:设置父类 @FieldDefaults:设置属性的使用范围,如private、public等,也可以设置属性是否被final修饰。 @Cleanup: 关闭流、连接点。 @EqualsAndHashCode:重写equals和hashcode方法。 @toString:创建toString方法。 参考文章

官方文档

1.1.12. BeanUtils

BeanUtils.copyProperties(a, b);

  • BeanUtils是org.springframework.beans.BeanUtils, a拷贝到b
  • BeanUtils是org.apache.commons.beanutils.BeanUtils, b拷贝到a

参考

results matching ""

    No results matching ""