您的位置:首页 > 编程语言 > Java开发

Spring黑马笔记入门三

2017-10-08 09:24 375 查看

别名

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



创建对象的时机

可以使用设置断点的方式 来判断对象的启动顺序

上课如果集中不了精力,使劲写注释

默认的情况下,都是在启动spring容器的时候,创建对象

一种情况 在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就能多实例,人家底层就是这样干的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring