中type 和class的本质区别(转)

本文介绍了JSP中使用<jsp:useBean>标签的方法,包括如何定义Bean的id、type和class属性,并探讨了这些属性的作用域(scope)及其对Bean实例化的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<jsp:useBean id =  "person" type = "foo.Person" scope = "page"/>
<jsp:useBean id =  "person" class = "foo.Person" scope = "page"/>

id:可以随便命名,是为了下文中通过id使用这个bean,例如:<%=person.getName()%>

type:是bean的引用类型,这里有多态的概念,可以是抽象类,接口,比如Animal是抽象类,子类有Cat和Dog就可以这样写:type=“Animal” 或者type=“Cat”

class:是bean的具体类,即实例化的类,那就肯定不会是抽象类了吧,所以这里只能这样写:class=“Cat”

scope:就是指定bean在哪个范围内活动,次范围以外没有他的身影,缺省是 page;


正如我们笔记中所写:使用type时:如果scope中没有此bean 就会抛异常,
java.lang.InstantiationException:bean person not found within scope
使用class时:如果scope没有 则会自动创建一个新bean 相应的_jspService()代码:
                              foo.Person person = null;
                              person = (foo.Person)_jspx_page
                                              _context.getAttribute("person",PageContext.PAGE_SCOPE);
                              if(person ==null){
                                   perosn = new foo.Person();
                                   _jspx_page_context.getAttribute
                                                            ("person",person,PageContext.PAGE_SCOPE);
                                }
我总结如下:class是具体类,没有实例的时候可以根据 class=“Cat” 创建一个实例,很简单就直接new;而是type 就不一定了行了,type=“Animal”,是抽象类,当然不能实例化,就是能实例化,那是该化Cat还是化Dog呢?你没告诉我实例化 狗还是猫 具体的类啊!
所以啊,我建议 如果你想用type,那你首先保证 scope中有这个类型的bean,否则异常多麻烦!

还可以这样说:type==引用类型    class==对象类型

 

http://bbs.tarena.com.cn/viewthread.php?tid=141163

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值