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

网站建设费用入账做网站用

网站建设费用入账,做网站用,centos wordpress 安装,wordpress网站数据库备份从笔者之前的博客,我们可以看出 Spring 是⽤来读取和存储 Bean,因此在 Spring 中 Bean 是最核⼼的操作 资源,所以接下来我们深⼊学习⼀下 Bean 对象:Bean作用域! 限定程序中变量的可用范围叫做作用域!或者…

从笔者之前的博客,我们可以看出 Spring 是⽤来读取和存储 Bean,因此在 Spring 中 Bean 是最核⼼的操作 资源,所以接下来我们深⼊学习⼀下 Bean 对象:Bean作用域!

限定程序中变量的可用范围叫做作用域!或者说在源代码中定义变量的某个区域就叫做作用域!

Bean的作用域是指:Bean在整个Spring容器中的行为模式!

比如:Singleton单列模式作用域:就是表示Bean在整个Spring中只有一份,它是全局共享的,那么当其他人修改了这个值之后,那么另一个人读取到的就是被修改的值!

使用@Bean注入一个user对象,对其起了一个名字user.setName("java"),A用户使用时,进行了修改操作,A用户调用user之后,创建了一个局部变量=user1;然后去改这个局部变量里的内容,通过user.setName("悟空");将”java“改为”悟空“,然后B用户再去使用Bean的时候,去调用来看一下打印结果!

创建被修改的类:User类:

package com.contrlooer;public class User {private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +'}';}
}

创建公共Bean:将id=1,name="java"的对象存储到Spring中

package com.contrlooer;import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;@Component
public class Users {@Bean public User user1(){User user=new User();user.setId(1);user.setName("java");//名称是javareturn user;}
}

A用户使用时,进行了修改操作:

package com.contrlooer;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;@Controller
public class UserController {@Autowiredprivate User user;public void printUser(){System.out.println(user);//java//修改UserUser myUser=user;myUser.setName("悟空");System.out.println("user-> "+ user);//悟空System.out.println("myUser-> "+ myUser);//悟空//两个变量指向了同一个对象(引用)}
}

用户B再去使用公共Bean的时候:

package com.contrlooer;import org.springframework.stereotype.Controller;import javax.annotation.Resource;@Controller
public class UserController2 {@Resourceprivate User user;public void printUser2(){System.out.println("user--> " + user);//预期java,但是,实际的结果确实:悟空}
}

在上述的运行结果中,我们预期是java,但实际的结果却是悟空

此Bean在整个框架中(Spring容器)中,只有一份【Bean作用域默认为:单列模式】,只有一份意味着:任何地方做出的修改,当再次读到的都是修改后的值!

打印A用户和B用户公共Bean的值:

package com.contrlooer;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class App {public static void main(String[] args) {ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");UserController controller=context.getBean("userController",UserController.class);UserController2 controller2=context.getBean("userControlle2r",UserController2.class);controller.printUser();controller2.printUser2();}
}

原因分析:

操作以上问题的原因是因为Bean默认情况下是单列模式(Singleten),也就是所有人的使用都是同一个对象,之前我们学单列模式的时候,都知道,使用单列模式可以很大程度上提高性能,所以在Spring中Bean的作用域默认也是Singleton(单列模式)!!

Spring Bean的作用域(Scope)有六种:

  1. 单列模式:Singleton(默认模式)——》性能考虑

    描述该作用域下的Bean在IoC容器中只存在一个实列:获取Bean(即:通过applicationContext.getBean等方法获取)及装配Bean(通过@Autoeired注入)都是同一个对象

    场景:通常无状态的Bean使用该作用域,无状态表示Bean对象的属性不需要更新

    备注:Spring中默认选择该作用域!

    注意:普通的Spring项目中,只有前两种(单列模式。原型模式)后面的四种状态是Spring MVC中的值

  2. 原型模式(多列模式):prototype

    描述:每次对该作用域下的Bean的请求都会创建新的实例

    获取Bean(通过applicationContext.getBean等方法获取)及装配Bean(通过@Autoeired注入)都是新的对象

    场景:通常有状态的Bean使用该实例

  3. 请求作用域:request

    每次HTTP请求,都会创建一个Bean对象(适用于Spring MVC/Spring Web)

    描述:每次http请求,都会场景新的Bean实列,类似于prototype(多列模式)

    场景:一次http请求和相应的共享Bean

    备注:限定Spring MVC中使用

  4. 会话作用域:session

    每次Session会话共享一个Bean【Spring MVC】

    描述:在一个http Session中,定义一个Bean实例

    场景:用户回话的共享Bean,比如:记录一个用户的登录信息

    备注:限定Spring MVC中使用

  5. 全局作用域:application(了解)

    一个http servlet  context中共享一个Bean【Spring MVC】

    描述:在一个http servlet Context中,定义一个Bean实列

    场景:Web应用的上下文信息,比如:记录一个应用的共享信息

    备注:限定Spring MVC中使用

  6. 网络长连接:webSocket,只适用于Spring web Socket项目(了解)

    描述:在一个HTTP  WebSocket的生命周期中,定义一个Bean实列

    场景:WebSocket的每次会话中,保存了一个Map结构的头信息,用来包裹客户端的消息头,第一次初始化后,直到WebSocket结束都是同一个Bean

    备注:限定Spring  WebSocket中使用

单例作用域(singleton) VS 全局作用域(application)

  • singleton是Spring Core的作用域,application是Spring Web中的作用域
  • singleton作用于IoC容器,而application作用于Servlet容器

Bean作用域设置:

使用@Scope标签可以用来声明Bean的作用域

@Component
public class Users {@Bean//在存的时候设置作用域,在创建的时候就决定类型了@Scope("prototype")// @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)//二选一public User user1(){User user=new User();user.setId(1);user.setName("java");//名称是javareturn user;}
}

Bean执行流程(Spring执行流程)

启动Spring容器——》实例话Bean(分配内存空间,从无到有)——》Bean注册到Spring容器中(存操作)——》将Bean装配到需要的类型(取操作)

http://www.yayakq.cn/news/696883/

相关文章:

  • 网站注册备案查询高清的广州网站建设
  • html5网站建设思路江浦做网站
  • 万网网站建设的子分类能显示多少个哪些网站做推广
  • 微信小程序网站建设方案外发加工网app
  • 口碑好网站建设哪家好衡水专业做网站
  • 上海网站建设沪icp备响应式网站的几种尺寸
  • 域名和网站的关系简单漂亮中英文企业网站系统
  • 重庆专业的网站建设公司排名有什么做照片书的网站
  • 2018江苏省海门市建设局网站电商网站开发书籍
  • 做兼职那个网站比较好浙江大学教室办事大厅网站建设
  • 张家港外贸网站建设旅游网站首页设计
  • 做网站的工资高吗?acaa平面设计师证书报名费
  • 做文学网站需要网站加栏目
  • 网站建设公司权威排名本网站建设
  • 网上商城网站开发需求说明书有个电商网站模板
  • 域名注册没有网站百度网盟如何选择网站
  • 成都建设局网站首页wordpress安装2个网站
  • 深圳公司网站建设案例百度区域代理
  • 阿里云做网站麻烦吗wordpress 插件 升级
  • 婚庆公司网站制作可以直接进入的网站正能量大豆网
  • 学校网站建设方案宁德网页设计
  • 阳江网站设计网站上传视频教程
  • 六年级做的网站的软件下载晋州住房保障建设局网站
  • 找做防水去那个网站公建一般多少钱
  • 自适应网站平台常德软件开发
  • 网站优化效果查询网页设计怎么做流动图片
  • dw怎么做音乐网站北京广告
  • 网站标题算关键词优化吗外包加工网是正规的吗
  • 网站推广注意事项500个公司取名大全
  • 手机网站的特效百度做的网站后台怎么建设