大家好,關(guān)于javabean和javabean區(qū)別很多朋友都還不太明白,今天小編就來(lái)為大家分享關(guān)于cookie和session區(qū)別的知識(shí),希望對(duì)各位有所幫助!
注冊(cè)bean的方式
注冊(cè)Bean的方式有三種:xml方式、注解方式和JavaConfig方式xml方式需要在xml文件中進(jìn)行配置,而注解方式則需要在類(lèi)中加上相應(yīng)的注解,在Spring容器中讀取ApplicationContext中的類(lèi),根據(jù)注解進(jìn)行配置而JavaConfig方式是通過(guò)編寫(xiě)Java代碼的方式進(jìn)行Bean的注入在實(shí)際開(kāi)發(fā)中,根據(jù)需要選擇不同的方式進(jìn)行Bean的注冊(cè),如果是維護(hù)一個(gè)老項(xiàng)目或者Bean較少的情況下,xml方式可以使用而對(duì)于新項(xiàng)目或者Bean數(shù)量較多的情況下,可以選擇使用注解或者JavaConfig方式進(jìn)行Bean的注冊(cè)
beanfactory和application區(qū)別
區(qū)別是功能不一樣
1.Application:Spring容器上下文,它是Spring中最基本的接口之一,提供了整個(gè)應(yīng)用程序中所有bean實(shí)例的創(chuàng)建和管理,并協(xié)調(diào)Spring中各個(gè)依賴(lài)模塊之間的交互和通信。
2.BeanFactory:Spring底層容器,它是Spring中最基本的接口之一,提供了對(duì)象的創(chuàng)建、管理、銷(xiāo)毀等基本功能,是Java企業(yè)級(jí)應(yīng)用程序中所有SpringBean創(chuàng)建的根源,也是大部分高級(jí)Spring功能的基礎(chǔ)。
什么是bean有什么作用
創(chuàng)建一個(gè)bean定義,其實(shí)質(zhì)是用該bean定義對(duì)應(yīng)的類(lèi)來(lái)創(chuàng)建真正實(shí)例的"配方(recipe)"。把bean定義看成一個(gè)配方很有意義,它與class很類(lèi)似,只根據(jù)一張"處方"就可以創(chuàng)建多個(gè)實(shí)例。
你不僅可以控制注入到對(duì)象中的各種依賴(lài)和配置值,還可以控制該對(duì)象的作用域。這樣你可以靈活選擇所建對(duì)象的作用域,而不必在JavaClass級(jí)定義作用域。
EJB有狀態(tài)的會(huì)話Bean和無(wú)狀態(tài)的會(huì)話Bean的區(qū)別
在EJB里面,會(huì)話Bean分為兩種,一種是有狀態(tài)的會(huì)話Bean,另一種是無(wú)狀態(tài)的會(huì)話Bean,本節(jié)主要講解一下兩者之間的區(qū)別。
對(duì)于有狀態(tài)的會(huì)話Bean,這種情況屬于,服務(wù)端與你單獨(dú)開(kāi)辟了一塊空間與你進(jìn)行交互。而客戶端感覺(jué)服務(wù)端單獨(dú)為他自己服務(wù)似的。而無(wú)狀態(tài)的會(huì)話Bean,則服務(wù)端不提供了一個(gè)資源但是誰(shuí)用都行,他不負(fù)責(zé)。所以客戶端在使用的時(shí)候,則會(huì)感到這個(gè)服務(wù)與其他人共享似的。
服務(wù)端
分別創(chuàng)建一個(gè)有狀態(tài)的會(huì)話bean和一個(gè)無(wú)狀態(tài)的會(huì)話Bean。
新建一個(gè)EJB項(xiàng)目
新建項(xiàng)目1
新建項(xiàng)目2
然后創(chuàng)建兩個(gè)接口,兩個(gè)實(shí)現(xiàn)。(分別是有狀態(tài)和無(wú)狀態(tài))
有狀態(tài)會(huì)話Bean的接口和實(shí)現(xiàn):
publicinterfaceStatefulEjb{
publicvoidcompute(inti);
publicintgetResult();
}
@Stateful
@Remote(StatefulEjb.class)
publicclassStatefulEjbBeanimplementsStatefulEjb{
privateintstate;
publicvoidcompute(inti){
state+=i;
}
publicintgetResult(){
returnstate;
}
}
無(wú)狀態(tài)會(huì)話Bean的接口和實(shí)現(xiàn):
publicinterfaceStatelessEjb{
publicvoidcompute(inti);
publicintgetResult();
}
@Stateless
@Remote(StatelessEjb.class)
publicclassStatelessEjbBeanimplementsStatelessEjb{
privateintstate;
publicvoidcompute(inti){
state+=i;
}
publicintgetResult(){
returnstate;
}
}
創(chuàng)建完之后的結(jié)構(gòu)如下:
服務(wù)端接口
之后部署到JBOSS上,(我用的版本是jboss-5.0.1.GA)然后啟動(dòng)JBOSS這樣服務(wù)端就搭建好了。
客戶端
創(chuàng)建一個(gè)Java項(xiàng)目,然后添加一個(gè)main方法,這個(gè)就不詳細(xì)說(shuō)了。分別測(cè)試有狀態(tài)的會(huì)話Bean和無(wú)狀態(tài)的會(huì)話Bean。
1、創(chuàng)建java項(xiàng)目(略)
2、修改環(huán)境,需要添加jar包。(jboss安裝包里根目錄里面client里面的所有jar包)
客戶端代碼
//測(cè)試有狀態(tài)的會(huì)話Bean
publicclassStatefulEjbClient{
publicstaticvoidmain(String[]args)throwsNamingException{
//第一次會(huì)話
InitialContextcontext=newInitialContext();
StatefulEjbejb1=(StatefulEjb)context.lookup("StatefulEjbBean/remote");
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
//第二次會(huì)話
StatefulEjbejb2=(StatefulEjb)context.lookup("StatefulEjbBean/remote");
System.out.println(ejb2.getResult());
ejb2.compute(1);
System.out.println(ejb2.getResult());
ejb2.compute(1);
System.out.println(ejb2.getResult());
ejb2.compute(1);
System.out.println(ejb2.getResult());
ejb2.compute(1);
System.out.println(ejb2.getResult());
}
}
測(cè)試結(jié)果:
有狀態(tài)的會(huì)話Bean測(cè)試結(jié)果
//測(cè)試無(wú)狀態(tài)的會(huì)話Bean
publicclassStatelessEjbClient{
publicstaticvoidmain(String[]args)throwsNamingException{
//第一次會(huì)話
InitialContextcontext=newInitialContext();
StatelessEjbejb1=(StatelessEjb)context.lookup("StatelessEjbBean/remote");
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
//第二次會(huì)話
StatelessEjbejb2=(StatelessEjb)context.lookup("StatelessEjbBean/remote");
System.out.println(ejb2.getResult());
ejb1.compute(1);
System.out.println(ejb2.getResult());
ejb1.compute(1);
System.out.println(ejb2.getResult());
ejb1.compute(1);
System.out.println(ejb2.getResult());
ejb1.compute(1);
System.out.println(ejb2.getResult());
}
}
測(cè)試結(jié)果:
無(wú)狀態(tài)的會(huì)話Bean測(cè)試結(jié)果
對(duì)比上述的兩個(gè)結(jié)果:
有狀態(tài)的會(huì)話Bean,每一個(gè)會(huì)話都是一個(gè)新的開(kāi)始。而無(wú)狀態(tài)的會(huì)話Bean每個(gè)會(huì)話用的時(shí)候都會(huì)接著用上一次的會(huì)話。
有狀態(tài)會(huì)話bean:每個(gè)用戶有自己特有的一個(gè)實(shí)例,在用戶的生存期內(nèi),bean保持了用戶的信息,即“有狀態(tài)”;一旦用戶滅亡(調(diào)用結(jié)束或?qū)嵗Y(jié)束),bean的生命期也告結(jié)束。即每個(gè)用戶最初都會(huì)得到一個(gè)初始的bean。
無(wú)狀態(tài)會(huì)話bean:bean一旦實(shí)例化就被加進(jìn)會(huì)話池中,各個(gè)用戶都可以共用。即使用戶已經(jīng)消亡,bean的生命期也不一定結(jié)束,它可能依然存在于會(huì)話池中,供其他用戶調(diào)用。由于沒(méi)有特定的用戶,那么也就不能保持某一用戶的狀態(tài),所以叫無(wú)狀態(tài)bean。但無(wú)狀態(tài)會(huì)話bean并非沒(méi)有狀態(tài),如果它有自己的屬性(變量),那么這些變量就會(huì)受到所有調(diào)用它的用戶的影響,這是在實(shí)際應(yīng)用中必須注意的。
Java中如何完整美的構(gòu)建一個(gè)java bean
非常好的一個(gè)問(wèn)題。完美的javabean,在我看來(lái),首先要數(shù)據(jù)結(jié)構(gòu)清晰,其次要能提升開(kāi)發(fā)效率。
數(shù)據(jù)結(jié)構(gòu)清晰:得要會(huì)做設(shè)計(jì),知道如何合理的建立領(lǐng)域模型,這個(gè)在長(zhǎng)鏈接應(yīng)用(如游戲、直播間)的開(kāi)發(fā)中還是非常有用的,這個(gè)領(lǐng)域模型中的每個(gè)對(duì)象就是javabean,維護(hù)好這些javabean也就是維護(hù)好內(nèi)存狀態(tài),遇到問(wèn)題時(shí),把對(duì)象序列化打印出來(lái)看下,清晰的數(shù)據(jù)結(jié)構(gòu)有助于快速發(fā)現(xiàn)問(wèn)題原因。
提升開(kāi)發(fā)效率:以dao層的開(kāi)發(fā)為例,數(shù)據(jù)庫(kù)中表關(guān)系有三種:?jiǎn)伪怼?對(duì)1、1對(duì)多。數(shù)據(jù)庫(kù)代碼生成工具能生成單表的javabean對(duì)象,單表的增刪改查開(kāi)發(fā)效率已經(jīng)很高了。1對(duì)1的表,可以封裝個(gè)中間對(duì)象,以對(duì)象引用的方式添加到主對(duì)象上,這時(shí)有人就要說(shuō)了,引用對(duì)象的裝配(每個(gè)屬性set值)比較麻煩,其實(shí)數(shù)據(jù)庫(kù)查詢(xún)出來(lái)的map和javabean之間是可以做自動(dòng)映射的,可以自己去想想如何封裝。1對(duì)多的表,也是添加對(duì)象引用,for循環(huán)賦值即可。這樣dao層的開(kāi)發(fā)基本不需要寫(xiě)set操作,開(kāi)發(fā)效率還是很可觀的。
(1對(duì)1表的結(jié)果集不建議直接用map,使用時(shí)不直觀;同時(shí)也不建議把所有屬性平行的放到一個(gè)janabean中,一方面有重名問(wèn)題,一方面數(shù)據(jù)庫(kù)改字段后不易維護(hù))
javabean和javabean區(qū)別和cookie和session區(qū)別的問(wèn)題分享結(jié)束啦,以上的文章解決了您的問(wèn)題嗎?歡迎您下次再來(lái)哦!