Spring中的bean和javabeand的区别和各自的scope

首先介绍下他们之间的不同:

用处不同:传统javabean更多地作为值传递参数,而spring中的bean用处几乎无处不在,任何组件都可以被称为bean。

写法不同:传统javabean作为值对象,要求每个属性都提供getter和setter方法;但spring中的bean只需为接受设值注入的属性提供setter方法。

生命周期不同:传统javabean作为值对象传递,不接受任何容器管理其生命周期;spring中的bean有spring管理其生命周期行为。

所有可以被spring容器实例化并管理的java类都可以称为bean。

原来服务器处理页面返回的值都是直接使用request对象,后来增加了javabean来管理对象,所有页面值只要是和javabean对应,就可以用类.GET属性方法来获取值。javabean不只可以传参数,也可以处理数据,相当与把一个服务器执行的类放到了页面上,使对象管理相对不那么乱(对比asp的时候所有内容都在页面上完成)。

spring中的bean,是通过配置文件、javaconfig等的设置,有spring自动实例化,用完后自动销毁的对象。让我们只需要在用的时候使用对象就可以,不用考虑如果创建类对象(这就是spring的注入)。一般是用在服务器端代码的执行上。

1、Spring中的bean

Scope,也称作用域,在 Spring IoC 容器是指其创建的 Bean 对象相对于其他 Bean 对象的请求可见范围。在 Spring IoC 容器中具有以下几种作用域:基本作用域(singleton、prototype),Web 作用域(reqeust、session、globalsession),自定义作用域。 
1、Spring 的作用域在装配 Bean 时就必须在配置文件中指明,配置方式如下(以 xml 配置文件为例):

  • <!-- 具体的作用域需要在 scope 属性中定义 -->
    <bean id="XXX" class="com.XXX.XXXXX" scope="XXXX" />

singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例

prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例

request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效

session:对于每次HTTP Session,使用session定义的Bean都将产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效

globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效

  其中比较常用的是singleton和prototype两种作用域。对于singleton作用域的Bean,每次请求该Bean都将获得相同的实例。容器负责跟踪Bean实例的状态,负责维护Bean实例的生命周期行为;如果一个Bean被设置成prototype作用域,程序每次请求该id的Bean,Spring都会新建一个Bean实例,然后返回给程序。在这种情况下,Spring容器仅仅使用new 关键字创建Bean实例,一旦创建成功,容器不在跟踪实例,也不会维护Bean实例的状态。

  如果不指定Bean的作用域,Spring默认使用singleton作用域。Java在创建Java实例时,需要进行内存申请;销毁实例时,需要完成垃圾回收,这些工作都会导致系统开销的增加。因此,prototype作用域Bean的创建、销毁代价比较大。而singleton作用域的Bean实例一旦创建成功,可以重复使用。因此,除非必要,否则尽量避免将Bean被设置成prototype作用域。 
   
 2、基于注解开发时,@scope完成bean的作用域配置默认是单例模式(singleton)如果需要设置的话可以修改对应值与以上提到的一致例如:@scope(“prototype”)

2、传统的javabean

JavaBean就是把程序中的实体对象及业务逻辑单独的封装到Java类当中。然后再JSP页面中调用这个封装好的

类,这样可以降低HTML与Java代码的耦合度,简化界面。

       JavaBean有四个作用域范围,我们使用<jsp:useBean>动作元素的scope属性可以用来指定JavaBean的作用范

围。实际上,JSP页面的四大作用域是和JavaBean的四个作用域实质上是相同的,那么我们就来看看JavaBean的四

大作用域。

<bean id="userDetail" class="com.yzj.wf.po.action.PeopleDetailAction"
		scope="session">

       JavaBean四种作用域范围说明:

       1)pagez作用域:仅在当前页面有效。

       2)request作用域:可以通过HttpRequest.getAttribute()方法取得JavaBean对象。

       3)session作用域:可以通过HttpSession.getAttribute()方法取得JavaBean对象。

       4)application作用域:可以通过application.getAttribute()方法取得JavaBean对象。

       JSP九大内置对象的作用域:

在最早的版本中,Spring是被设计用来管理JavaBean的,所以Spring管理的对象会被称为“bean”。当然,现在Spring已经可以管理任何对象,即使它不具备默认构造器和设置方法(getter和setter)这些JavaBean的特性。不过“Spring bean”这个术语仍然被保存了下来。所以在有spring的情况下我们一般都会使用springbean来让ioc容器帮助我们管理bean。

猜你喜欢

转载自blog.csdn.net/weixin_42189604/article/details/81977356