- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
现在有一个公共 Bean
@Component
public class UserBean {
@Bean
public User user1() {
User user = new User();
user.setId(1);
user.setName("张三");
user.setAge(18);
return user;
}
}
现在有一个用户1, 进行了修改的操作
@Controller
public class UserControllerA {
@Autowired
private User user1;
public User getUser1() {
User user = user1;
System.out.println("用户1修改之前: " + user1);
user.setName("王五");
return user;
}
}
现在有用户2, 进行读取操作
@Controller
public class UserControllerB {
@Autowired
private User user1;
public User getUser1() {
User user = user1;
return user;
}
}
打印用户1和用户2公共Bean的值
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
UserControllerA userControllerA = context.getBean("userControllerA",UserControllerA.class);
User user = userControllerA.getUser1();
System.out.println("用户1修改之后: " + user);
UserControllerB userControllerB = context.getBean("userControllerB",UserControllerB.class);
User user1 = userControllerB.getUser1();
System.out.println("用户2读取到的: " + user1);
}
运行结果
原因:
Spring 中 Bean 的作用域默认是 singleton 单例模式. 所有人使用的都是同一个对象.
之前所说的作用域, 是在程序中定义的某个变量的某个区域就叫做作用域.这里的Bean作用域不同.
**Bean 的作用域指:**Bean在 Spring 整个框架中的某种行为模式,
比如 singleton 单例作用域, 就表示 Bean 在整个 Spring 中只有一份, 它是全局共享的, 那么当其他人修改了这个值之后, 那么另一个人读取到的就是被修改的值.
Spring 容器在初始化一个 Bean 的示例时, 同时会指定该实例的作用域.
Spring 有 6 种作用域.
singleton
: 单例作用域prototype
: 原型作用域 (多例作用域)request
: 请求作用域session
: 回话作用域application
: 全局作用域websocket
: HTTP WebSocket 作用域3~6 这四种是 Spring MVC 中的值.
@Scope 既可以用于方法注解, 也可以用于类注解
如果是 @Bean + @Scope , 这里的@Scope 就不能写成类注解的方式了.
Bean 的生命周期分为 5 大部分:
xxxAware
)BeanPostProcessor
@PostConstruct
初始化方法nit-mehtod
初始化方法BeanPostProcessor
@PreDestory
DisposableBean
, 执行实现方法destory-method
package com.wwzz.util;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Component
public class BeanLifeComponent implements BeanNameAware {
@Override
public void setBeanName(String s) {
System.out.println("执行通知: BeanNameAware " + s);
}
@PostConstruct
public void postConstruct(){
System.out.println("执行 @PostConstruct");
}
public void init() {
System.out.println("执行 init-method");
}
@PreDestroy
public void preDestroy(){
System.out.println("执行 @PreDestroy");
}
public void destroy() {
System.out.println("执行 destroy");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:content="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- 配置 Spring 扫描的根路径(此根路径下的所有 Spring 存对象的注解才能生效) -->
<content:component-scan base-package="com.wwzz"></content:component-scan>
<beans>
<bean id="beanLifeComponent" class="com.wwzz.util.BeanLifeComponent" init-method="init" destroy-method="destroy"></bean>
</beans>
</beans>
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
BeanLifeComponent beanLifeComponent = context.getBean("beanLifeComponent",BeanLifeComponent.class);
context.destroy();
}
这是我的本地域名 http://10.10.1.101/uxsurvey/profile/dashboard 在 Controller 中,我为用户列表设置了一个操作 redirect(control
要处理 Canonical URL,最佳做法是执行 301 重定向还是更好地为 www 和非 www 域使用相同的 IP 地址? 例如: 想要的规范 URL/域是 http://example.com
1 内网基础 内网/局域网(Local Area Network,LAN),是指在某一区域内有多台计算机互联而成的计算机组,组网范围通常在数千米以内。在局域网中,可以实现文件管理、应用软件共享、打印机
1 内网基础 内网/局域网(Local Area Network,LAN),是指在某一区域内有多台计算机互联而成的计算机组,组网范围通常在数千米以内。在局域网中,可以实现文件管理、应用软件共享、打印机
我想创建一个 weblogic 集群,其中有两个托管服务器,每个服务器在物理上独立的远程计算机上运行 根据weblogic文档 All Managed Servers in a cluster mus
我正在运行 grails 3.1.4,但在创建允许我将多个域对象绑定(bind)到其他几个域对象的模式时遇到了问题。作为我正在尝试做的一个例子: 我有三个类(class)。书籍、作者和阅读列表。 作者
我试图使用@count函数来根据它获取数据,但是在没有崩溃报告的情况下它以某种方式崩溃了。 这是代码 class PSMedia: Object { @objc dynamic var id
有谁知道是否有办法只输入字母字符而不输入数字?我想过这样的事情 CREATE DOMAIN countryDomain AS VARCHAR(100) CHECK( VALUE ??? );
我的代码: const checkoutUrl = 'https://example.com/checkout/*' window.onload = startup() function st
一些不是我编写的应用程序,也不是用 PHP 编写的,它为域 www.example.com 创建了一个 cookie。 我正在尝试替换该 cookie。所以在 PHP 中我做到了: setcookie
什么是 oauth 域?是否有任何免费的 oauth 服务?我可以将它用于 StackApps registration 吗? ?我在谷歌上搜索了很多,但找不到答案。 最佳答案 这是redirect_
自从 In October 2009, the Internet Corporation for Assigned Names and Numbers (ICANN) approved the cre
我使用 apache 作为我的应用程序 Web 服务器的代理,并希望即时更改与 sessionid cookie 关联的域名。 该cookie有一个与之关联的.company.com域,我想使用apa
我只想托管一个子域到cloudflare。我不想将主域名的域名服务器更改为他们的域名服务器。真的有可能吗? 最佳答案 是的,这是可能的,但是需要通过CloudFlare合作伙伴进行设置,或者您需要采用
When using socket in the UNIX domain, it is advisable to use path name for the directory directory m
想象两个共享一个域类的 Grails 应用程序。也许是 Book 域类。 一个应用程序被标识为数据的所有者,一个应用程序必须访问域数据。类似于亚马逊和亚马逊网络服务。 我想拥有的应用程序将使用普通的域
我有一个包含字段“URL”的表单。第一部分需要用户在文本框中填写。第二部分是预定义的,显示在文本框的右侧。 例如,用户在文本框中输入“test”。第二部分预定义为“.example.com”。因此,总
如果我要关闭并取消分配 azure 中的域 Controller ,从而生成新的 vm Generationid,我需要采取哪些步骤来恢复它? 最佳答案 what steps do I need to
我想尝试使用 Azure 作为托管提供商(我有一个域)。我读过那篇文章https://learn.microsoft.com/en-us/azure/app-service-web/web-sites
所以.... 我想知道是否有人可以在这方面协助我? 基本上,我已经创建了一个自托管的Docker容器,用作构建代理(Azure DevOps) 现在,我已经开始测试代理,并且由于我们的放置文件夹位于W
我是一名优秀的程序员,十分优秀!