一. IoC和AOP
IoC和AOP是Spring框架中的两个核心思想。
1. 什么是IoC?
IoC(Inversion of Control)控制反转,是一种设计思想或设计模式,不是一种具体的技术实现。IoC的核心思想是将原本在程序中手动创建对象的控制权交给Spring框架管理。
IoC可以看作是一个工厂,负责对对象进行统一创建和管理。当需要创建一个对象时,只需要配置好配置文件和注解即可,不需要了解对象是如何创建的。在Spring中,IoC容器是实现IoC的载体,IoC容器实际上是一个Map(key,value),存放各种对象。
IoC解决了什么问题?
让两方不在相互依赖,交由第三方容器进行资源管理。这样可以降低对象间的耦合度和依赖程度,同时方便了资源的统一管理。
IoC 最常见以及最合理的实现方式叫做依赖注入(Dependency Injection,简称 DI)。
2. 什么是AOP?
AOP(Aspect-Oriented Programming)面向切面编程,将那些与业务无关,却为业务模块所共同调用的逻辑(如事务处理、日志管理、权限控制等)封装起来。减少冗余代码,降低模块耦合度,便于后续的扩展与维护。
AOP之所以称为面向切面编程,是因为它的核心思想是将横切关注点(事务处理、日志管理、权限控制等)从核心业务逻辑中分离出来,形成一个个切面(横切关注点的封装类)。
AOP解决了什么问题?
在不改变原有业务逻辑的前提下,将横切关注点从核心业务逻辑中分离,减少代码冗余程度,实现代码的复用和解耦。
AOP的底层基于动态代理,如果要代理的对象实现了接口,那么AOP采用JDK动态代理去创建代理对象,如果没有实现接口的对象,那么采用Cglib生成一个被代理对象的子类作为代理。
二. Spring MVC
MVC是模型(Model)、视图(View)、控制器(Controller)的缩写,其核心思想是通过将业务逻辑、数据、视图分离来组织代码。
Spring MVC 可以帮助我们进行更简洁的 Web 层的开发,并且它天生与 Spring 框架集成。Spring MVC 下一般把后端项目分为 Service 层(处理业务)、Dao 层(数据库操作)、Entity 层(实体类)、Controller 层(控制层,返回数据给前端)。
三. Spring、Spring MVC和Spring Boot之间的关系
Spring MVC和Spring Boot是建立在Spring框架基础上的扩展。
Spring MVC是基于Spring的Web开发框架,用于构建Web应用程序。Spring Boot简化了Spring的搭建和配置,做到开箱即用,并且内嵌服务器,如Tomcat,方便部署和运行,同时也提供了一系列强大的开发工具支持,如自动重启、自动化测试等,提升了开发效率。
四. Spring Bean
Bean代指那些被IoC容器管理的对象。需要告诉IoC容器帮我们管理哪些对象。
1. 将一个类声明为Bean的注解有哪些?
- @Component:通用的注解,可标注任意类为Spring组件。如果一个Bean不知道属于哪个层,可用该注解
- @Repository: 对应持久层Dao层,主要用于数据库相关操作。
- @Service: 对应服务层,主要涉及一些复杂的逻辑,需要调用Dao层。
- @Controller: 对应Spring MVC控制层,主要用于接受用户请求并调用 Service 层返回数据给前端页面。
2. @Component 和 @Bean 的区别是什么?
- @Component 注解作用于类,@Bean注解作用于方法。
- @Component 通过类路径扫描来自动检测类以及自动装配到Spring容器中(可以使用ComponentScan注解定义要扫描的路径,从中找出标识了需要装配的类)
- @Bean注解通常是在标有该注解的方法中,定义产生这个bean,告诉Spring这是某个类的实例,要用时给我。
- @Bean注解比@Component注解的自定义性更强,而且很多地方只能通过Bean注解来注册bean。比如引用第三方库中的类,需要装配到Spring容器时,只能通过@Bean来实现。
3. 注入Bean的注解有哪些?
Spring内置的 @Autowired 以及 JDK 内置的 @Resource 和 @Inject 都可以用于注入 Bean。
4. @Autowired和@Resource的区别?
- @Autowired是Spring提供的注解,@Resource是JDK提供的注解。
- Autowired默认注入方式为byType,@Resource默认注入方式为byName。
- 一个接口存在多个实现类时,@Autowired和@Resource都需要通过名称匹配到对应Bean。Autowired可以通过 @Qualifier注解来显式指定名称,@Resource可以通过name属性来显式指定名称。
5. Bean的作用域
- singleton: IoC容器中只有唯一的bean实例。Spring中的bean默认都是单例的,是对单例设计模式的应用。
- prototype: 每次获取都会创建一个新的bean实例。连续getBean() 两次,得到不同的Bean实例。
- request(仅Web应用可用): 每次HTTP请求都会产生一个新的bean(请求 bean),该bean仅在当前HTTP request内有效。
- session(仅 Web 应用可用) : 每次来自新session的HTTP请求都会产生一个新的bean(会话 bean),该 bean 仅在当前 HTTP session 内有效。
- application/global-session(仅 Web 应用可用):每个Web应用启动时创建一个Bean(应用 Bean),该 bean 仅在当前应用启动时间内有效。
- websocket(仅 Web 应用可用):每一次WebSocket会话产生一个新的 bean。
如何配置作用域?
xml方式:
<bean id="..." class="..." scope="singleton"></bean>
注解方式:
@Bean
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public Person personPrototype() {
return new Person();
}
标签:总结,知识点,Web,Spring,bean,Bean,注解,IoC
From: https://blog.csdn.net/konghaoran1/article/details/136928641