Spring黑马笔记入门三

来源:互联网 发布:ubuntu lamp环境 编辑:程序博客网 时间:2024/05/18 21:10

别名

这个就很简单,给bean起个外号,在容器中使用别名就能够调用此类中的方法。通过在xml文件中统一配置,我们就可以在不同的地方使用不同的名字来使用bean。

这里写图片描述

创建对象的时机

可以使用设置断点的方式 来判断对象的启动顺序
上课如果集中不了精力,使劲写注释

  1. 默认的情况下,都是在启动spring容器的时候,创建对象
  2. 一种情况 在getbean的时候创建对象。

这里写图片描述

lazy-init="default/true/faulse"指的是懒加载

那么问题来了,这两种方式的区别是,换句话说懒加载的好处是什么:

我们在具体使用的时候,是不是要写很多配置文件?在容器创建的时候被发现呢,还是在被调用的时候发现有问题?

所以我们使用的时候 都是默认启动spring容器的时候调用,这样的话就会去找这个类,如果没有找到就报错,如果你使用了lazy-init=true的话,只有在请求的时候才会发现有错误。

一个对象在容器中是多实例的还是单实例的是不是得搞清楚?

怎搞清楚,看对象的hash码是不是一样的。

这里写图片描述

默认的是单实例的

如果说scope属性为 prototype Spring产生的对象就是多实例的,ok,
线程安全

那么多实例与单实例有什么区别呢?

假设我在类中声明一个集合 那么这个集合就是共享集合
action dao service要全部放到spring容器当中,而且service 和dao都是单实例的,而struts2的action是多实例的每次请求都会产生新的对象。

比如 我dao假设返回一个集合,记得绝对不能要把集合声明到属性里,这样的话这个集合就变成共享集合了,就变成全局的了。这么做是很危险的,当然如果你的属性变成prototype类型的就不会有这个问题了。因为你的是多实例的,对象就不同了。如果将来在struts2和spring整合的时候,不是spring一启动容器的时候创建对象,而是当浏览器发起一个url请求的时候,它才会让spring容器创建Action,而此时action必须为多实例的。无论lazy-init是什么值,都是在content.getBean时才会创建对象。
这里写图片描述
图11
这里写图片描述
图12
service和dao层为啥时单实例呢 ?
那么 如果1000次请求,1000个service 1000个dao jvm疯了!
为啥struts2就能多实例,人家底层就是这样干的

原创粉丝点击