当前位置: 首页 > wzjs >正文

松江网站建设平台华为云服务器官网入口

松江网站建设平台,华为云服务器官网入口,系部网站建设,重庆梁平网站建设哪家便宜一:Spring原理 1.1 Bean 作用域的引入 在 Spring 的 IoC 和 DI 阶段,我们学习了 Spring 如何有效地管理对象。主要内容包括: 使用 Controller、Service、Repository、Component、Configuration 和 Bean 注解来声明 Bean 对象。通过 Applic…

一:Spring原理

1.1 Bean 作用域的引入

在 Spring 的 IoC 和 DI 阶段,我们学习了 Spring 如何有效地管理对象。主要内容包括:

  1. 使用 @Controller、@Service、@Repository、@Component、@Configuration 和 @Bean 注解来声明 Bean 对象。
  2. 通过 ApplicationContext 或 BeanFactory 获取对象实例。
  3. 通过 @Autowired、Setter 方法或构造方法等方式将所依赖的 Bean 对象注入到应用程序中。

Bean 的作用域指的是 Bean 在 Spring 框架中的特定行为模式。例如,单例作用域表示同一个 Bean 在整个 Spring 容器中只有一个实例,是全局共享的。如果一个 Bean 的值被某个组件修改,则其他组件读取到的将是被修改后的值,这是 Spring 默认采用的行为模式。

1.2 Bean 作用域

在 Spring 中,共支持六种作用域,其中后四种作用域仅在 Spring MVC 环境中有效:

  1. singleton:单例作用域,表示整个 Spring 容器中同名称的 Bean 只有一个。
  2. prototype:原型作用域又叫做多例作用域,表示每次使用该 Bean 的时候都会创建一个新的。
  3. request:请求作用域,表示在一次 HTTP 请求中创建一个 Bean 实例,该实例在请求结束后销毁。
  4. session:会话作用域,表示在一个 HTTP 会话中只存在一个 Bean 实例,直到会话结束。
  5. application:全局作用域,表示在整个应用上下文中只有一个 Bean 实例。
  6. websocket:HTTP WebSocket 作用域,表示在 WebSocket 会话中只存在一个 Bean 实例。

下面一起来看看代码吧:

import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.RequestScope;
import org.springframework.web.context.annotation.SessionScope;
import org.springframework.web.context.annotation.ApplicationScope;@Component
public class DogBeanConfig {@Beanpublic Dog dog() {Dog dog = new Dog();dog.setName("旺旺");return dog;}@Bean@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)public Dog singleDog() {return new Dog();}@Bean@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)public Dog prototypeDog() {return new Dog();}@Bean@RequestScopepublic Dog requestDog() {return new Dog();}@Bean@SessionScopepublic Dog sessionDog() {return new Dog();}@Bean@ApplicationScopepublic Dog applicationDog() {return new Dog();}
}

下面测试不同作用域的 Bean 取到的对象是否⼀样:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class DogController {@Autowiredprivate Dog singleDog;@Autowiredprivate Dog prototypeDog;@Autowiredprivate Dog requestDog;@Autowiredprivate Dog sessionDog;@Autowiredprivate Dog applicationDog;@Autowiredprivate ApplicationContext applicationContext;@RequestMapping("/single")public String single() {Dog contextDog = (Dog) applicationContext.getBean("singleDog");return "dog: " + singleDog.toString() + ", contextDog: " + contextDog.toString();}@RequestMapping("/prototype")public String prototype() {Dog contextDog = (Dog) applicationContext.getBean("prototypeDog");return "dog: " + prototypeDog.toString() + ", contextDog: " + contextDog.toString();}@RequestMapping("/request")public String request() {Dog contextDog = (Dog) applicationContext.getBean("requestDog");return "dog: " + requestDog.toString() + ", contextDog: " + contextDog.toString();}@RequestMapping("/session")public String session() {Dog contextDog = (Dog) applicationContext.getBean("sessionDog");return "dog: " + sessionDog.toString() + ", contextDog: " + contextDog.toString();}@RequestMapping("/application")public String application() {Dog contextDog = (Dog) applicationContext.getBean("applicationDog");return "dog: " + applicationDog.toString() + ", contextDog: " + contextDog.toString();}
}

下面观察一下 Bean 的作用域:

  1. 单例作用域:http://127.0.0.1:8080/single

在这里插入图片描述
多次访问后获得的都是同一个对象,同时使用 @Autowired 注入的对象和通过 applicationContext.getBean() 获取的对象也是相同的实例。

  1. 多例作用域:http://127.0.0.1:8080/prototype

在这里插入图片描述

观察 contextDog,每次获取的对象都是不同的。因为注入的对象在 Spring 容器启动时就已经注入,因此在多次请求中,注入的对象不会发生变化。

  1. 请求作用域:http://127.0.0.1:8080/request

在这里插入图片描述
在一次请求中,@Autowired 注入的对象和通过 applicationContext.getBean() 获取的对象是同一个实例。然而,在每次请求中,applicationContext.getBean() 会重新创建新对象。

  1. 会话作用域:http://127.0.0.1:8080/session

在这里插入图片描述

在这里插入图片描述

在同一个会话中,经过多次请求后获取到的对象都是相同的。然而,当换用另一个浏览器访问时,会重新创建一个新的对象,因为这将启动一个不同的会话。

  1. Application 作用域:http://127.0.0.1:8080/application

在这里插入图片描述

在一个应用中,多次访问返回的都是同一个对象。Application scope 表示 Bean 的作用域是 ServletContext 级别,这与 singleton 类似,但二者之间有一定区别:Application scope 是 ServletContext 的单例,而 singleton 是 ApplicationContext 的单例。在一个 Web 容器中,可以存在多个 ApplicationContext。

1.2 Bean 的生命周期

生命周期指的是一个对象从创建到销毁的整个过程,通常称为对象的生命周期。Bean 的生命周期可以分为以下五个部分:

  1. 实例化:为 Bean 分配内存空间。
  2. 属性赋值:进行 Bean 注入和装配,例如 @Autowired。
  3. 初始化:执行各种通知和初始化方法。
  4. 使用 Bean:在应用中使用已配置的 Bean。
  5. 销毁 Bean:通过容器的各种销毁方法。

在这里插入图片描述

import com.example.demo.component.UserComponent;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;@Component
public class BeanLifeComponent implements BeanNameAware {private UserComponent userComponent;public BeanLifeComponent() {System.out.println("执行构造函数");}@Autowiredpublic void setUserComponent(UserComponent userComponent) {System.out.println("设置属性 userComponent");this.userComponent = userComponent;}@Overridepublic void setBeanName(String s) {System.out.println("执行了 setBeanName 方法:" + s);}@PostConstructpublic void postConstruct() {System.out.println("执行 PostConstruct()");}public void use() {System.out.println("执行了 use 方法");}@PreDestroypublic void preDestroy() {System.out.println("执行:preDestroy()");}
}

在这里插入图片描述

1.3 源码阅读

这里等作者好好研究一下,研究好了再来补充。。。。

二:Spring Boot 自动配置

Spring Boot 的自动配置是在 Spring 容器启动后,自动将一些配置类和 Bean 对象存入 IoC 容器,无需手动声明,从而简化了开发,减少了繁琐的配置操作。自动配置的核心在于 Spring Boot 如何将依赖的 Jar 包中的配置类和 Bean 加载到 Spring IoC 容器中。我们学习的内容主要分为以下两个方面:

  1. Spring 是如何把对象加载到 Spring IoC 容器中的
  2. SpringBoot 是如何实现的

2.1 占位

占个位,等作者研究好了过来补充一下。。。。。。


文章转载自:

http://l26wIRsT.fndfn.cn
http://m0IVCLMk.fndfn.cn
http://vmjKyKE7.fndfn.cn
http://pPIJvDMZ.fndfn.cn
http://1aDKEckb.fndfn.cn
http://fUa7R8zr.fndfn.cn
http://0P6xk1cN.fndfn.cn
http://8hFELIJ2.fndfn.cn
http://n6OQbkso.fndfn.cn
http://QKdxYdss.fndfn.cn
http://kF6R1m1X.fndfn.cn
http://2boyoS3K.fndfn.cn
http://9u9gSLbn.fndfn.cn
http://x0Wo2Z3R.fndfn.cn
http://307GjuCq.fndfn.cn
http://noihH2dk.fndfn.cn
http://GnEaww6C.fndfn.cn
http://2isw6bOA.fndfn.cn
http://ysbq1dr1.fndfn.cn
http://uDojWa1p.fndfn.cn
http://HtDL4QZZ.fndfn.cn
http://qvGX17iY.fndfn.cn
http://3cUfifje.fndfn.cn
http://SRsu8OZJ.fndfn.cn
http://gbgOcQNK.fndfn.cn
http://yoeIkjop.fndfn.cn
http://QK844sKB.fndfn.cn
http://m4UUHz76.fndfn.cn
http://HsVEEHfF.fndfn.cn
http://PMQRHK3a.fndfn.cn
http://www.dtcms.com/wzjs/684029.html

相关文章:

  • 赣州网站建设开发个人简历表格可填写
  • 照片做视频的网站手机端尺寸
  • 许昌网络推广公司搜索关键词排名优化软件
  • 网站建站建设9277在线观看免费高清
  • 专业网页美工招聘怀化百度关键词优化公司
  • wordpress排版乱 了衡阳网站优化外包首选
  • 个人网站备案网址o2o网站开发公司
  • 网站建设合伙合同范本教师兼职做网站
  • 娄底企业网站建设制作代理 网站前置审批
  • 公司网站制作汇报会做网站需要知道什么
  • 网站建设论文的摘要找山东制作app公司
  • 客户拒绝做网站的理由建筑企业网站模板免费下载
  • 网站加速器推荐局域网聊天工具报告
  • 建设项目环评验收网站如何制作微信小程序店铺
  • 朝阳网站优化做网站需要用什么系统
  • 怎么建立外贸网站网站做支付宝 微信模块
  • 没有数据怎么做网站wordpress 4.7下载
  • 欧美化妆品网站模板网站设计 培训
  • 网站 专题建设服务wordpress 组织架构
  • 安徽合肥网站制作公司如何做好网站的优化的监测评价
  • 城市之星福州网站建设php网站开发需要学哪些
  • 陕西百威建设监理有限司网站请写出html文档的代码
  • 医疗网站建设代理商佛山网站开发公司有哪些
  • 关于公司建设网站的意义阿里云做视频网站
  • 南京市网站建设济南网站备案程序
  • 网站如何制作多少钱手机p2p网站建设
  • 网站建设 菜鸟教程建设一个电子商务网站
  • 2.0网站线上建设什么意思外贸圈是什么
  • 怎样用vs2017做网站深圳app定制开发外包公司
  • 服务器如何创建一个网站狼雨seo教程