一、安裝方法
Bean的概念:Spring結(jié)構(gòu)辦理的應(yīng)用程序中,由Spring容器擔(dān)任創(chuàng)立,安裝,設(shè)置特點(diǎn),進(jìn)而辦理整個(gè)生命周期的目標(biāo),稱(chēng)為Bean目標(biāo)。
1、XML格式安裝
Spring最傳統(tǒng)的Bean的辦理方法。
裝備方法
“userInfo”class=”com.spring.mvc.entity.UserInfo”><propertyname=”name”value=”cicada”/>bean>
測(cè)驗(yàn)代碼
ApplicationContextcontext01=newClassPathXmlApplicationContext(“/bean-scan-02.xml”);
UserInfouserInfo=(UserInfo)context01.getBean(“userInfo”);
System.out.println(userInfo.getName());
2、注解掃描
在實(shí)際開(kāi)發(fā)中:一般運(yùn)用注解取代xml裝備文件。
常見(jiàn)注解
@Component<==>”Class”>@Component(“id”)<==>”id”class=”Class”>@Repository:Mvc架構(gòu)中Dao層Bean的注解@Service:Mvc架構(gòu)中Service層Bean的注解@Controller:Mvc架構(gòu)中Controller層Bean的注解
運(yùn)用案例
//1、注解代碼塊@Component(“infoService”)publicclassInfoServiceImplimplementsInfoService{@OverridepublicvoidprintName(Stringname){
System.out.println(“Name:”+name);
}
}//2、裝備代碼塊@ComponentScan//組件掃描注解publicclassBeanConfig{
}
測(cè)驗(yàn)代碼
@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes=BeanConfig.class)
publicclassTest01{@AutowiredprivateInfoServiceinfoService;@Testpublicvoidtest1(){infoService.printName(“cicada”);System.out.println(infoService==infoService);
}
}
3、XML裝備掃描
上面運(yùn)用ComponentScan注解,也可在裝備文件進(jìn)行一致的裝備,效果相同,還簡(jiǎn)化代碼。
<context:component-scanbase-package=”com.spring.mvc”/>
4、Java代碼安裝
這種依據(jù)Configuration注解,辦理Bean的創(chuàng)立,在SpringBoot和SpringCloud的結(jié)構(gòu)中,非常常見(jiàn)。
裝備類(lèi)代碼
@Configuration//裝備類(lèi)注解publicclassUserConfig{@BeanpublicUserInfouserInfo(){
System.out.println(“userInfo…”);returnnewUserInfo();
}
}
測(cè)驗(yàn)代碼
@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes=UserConfig.class)
publicclassTest03{@AutowiredprivateUserInfouserInfo;@AutowiredprivateUserInfouserInfo1;@Testpublicvoidtest1(){/*
*userInfo…
*true
*/System.out.println(userInfo==userInfo1);
}
}
二、特點(diǎn)值設(shè)置
上面是Bean的安裝幾種常見(jiàn)方法,下面來(lái)看看Bean特點(diǎn)值設(shè)置,這兒就依據(jù)Xml裝備的方法。
1、根底類(lèi)型和調(diào)集
裝備代碼
<beanid=”emp1″class=”com.spring.mvc.entity.Employee”><propertyname=”name”value=”cicada”/><propertyname=”id”value=”1″/>bean><beanid=”emp2″class=”com.spring.mvc.entity.Employee”><propertyname=”name”value=”smile”/><propertyname=”id”value=”2″/>bean><beanid=”department”class=”com.spring.mvc.entity.Department”><propertyname=”name”value=”IT部分”/><propertyname=”empName”><list><value>empName1value><value>empName2value><value>empName3value>list>property><propertyname=”empList”><list><refbean=”emp1″/><refbean=”emp2″/><refbean=”emp1″/>list>property><propertyname=”empSet”><set><refbean=”emp1″/><refbean=”emp2″/><refbean=”emp1″/>set>property><propertyname=”empMap”><map><entrykey=”1″value-ref=”emp1″/><entrykey=”2″value-ref=”emp2″/><entrykey=”2″value-ref=”emp1″/>map>property><propertyname=”pp”><props><propkey=”pp1″>Helloprop><propkey=”pp2″>Worldprop>props>property>bean>
測(cè)驗(yàn)代碼
publicclassTest05{
@Testpublicvoidtest01(){
ApplicationContextcontext=newClassPathXmlApplicationContext(“/bean-value-03.xml”);
Departmentdepartment=(Department)context.getBean(“department”);
System.out.println(department.getName());
System.out.println(“———————>String數(shù)組”);for(Stringstr:department.getEmpName()){
System.out.println(str);
}
System.out.println(“———————>List調(diào)集”);for(Employeesmp:department.getEmpList()){
System.out.println(smp.getId()+”:”+smp.getName());
}
System.out.println(“———————>Set調(diào)集”);for(Employeeemp:department.getEmpSet()){
System.out.println(emp.getId()+”:”+emp.getName());
}
System.out.println(“———————>Map調(diào)集”);for(Map.Entryentry:department.getEmpMap().entrySet()){
System.out.println(entry.getKey()+”:”+entry.getValue().getName());
}
System.out.println(“———————>Properties”);
Propertiespp=department.getPp();
System.out.println(pp.get(“pp1”));
System.out.println(pp.get(“pp2″));
}
}
2、裝備結(jié)構(gòu)函數(shù)
依據(jù)裝備的參數(shù)個(gè)數(shù)和類(lèi)型,去映射并加載Bean的結(jié)構(gòu)方法。
裝備代碼
<beanid=”employee”class=”com.spring.mvc.entity.Employee”><constructor-argindex=”0″type=”java.lang.String”value=”cicada”/><constructor-argindex=”1″type=”int”value=”1″/>bean>
測(cè)驗(yàn)代碼
publicclassTest06{@Testpublicvoidtest01(){
ApplicationContextcontext=newClassPathXmlApplicationContext(“/bean-value-04.xml”);
Employeeemployee=(Employee)context.getBean(“employee”);
System.out.println(employee.getId()+”:”+employee.getName());
}
}
3、裝備承繼聯(lián)系
裝備代碼
<beanid=”student”class=”com.spring.mvc.entity.Student”><propertyname=”name”value=”Spring”/><propertyname=”age”value=”22″/>bean><beanid=”grade”class=”com.spring.mvc.entity.Grade”><propertyname=”name”value=”Summer”/><propertyname=”degree”value=”大學(xué)”/>bean>
測(cè)驗(yàn)代碼
publicclassTest07{@Testpublicvoidtest01(){
ApplicationContextcontext=newClassPathXmlApplicationContext(“/bean-value-05.xml”);
Gradegrade=(Grade)context.getBean(“grade”);/*Summer;0;大學(xué)*/System.out.println(grade.getName()+”;”+grade.getAge()+”;”+grade.getDegree());
}
}
三、效果域
效果域:用于確認(rèn)spring創(chuàng)立bean實(shí)例個(gè)數(shù),比如單例Bean,原型Bean,等等。
類(lèi)型闡明
singletonIOC容器僅創(chuàng)立一個(gè)Bean實(shí)例,IOC容器每次回來(lái)的是同一個(gè)單例Bean實(shí)例,默許裝備。
prototypeIOC容器能夠創(chuàng)立多個(gè)Bean實(shí)例,每次回來(lái)的Bean都是新的實(shí)例。
request每次HTTP懇求都會(huì)創(chuàng)立一個(gè)新的Bean,適用于WebApplicationContext環(huán)境。
session同一個(gè)HTTPSession同享一個(gè)Bean實(shí)例。不同HTTPSession運(yùn)用不同的實(shí)例。
global-session同session效果域不同的是,所有的Session同享一個(gè)Bean實(shí)例。
四、生命周期
在Spring結(jié)構(gòu)中Bean的生命周期非常復(fù)雜,進(jìn)程大致如下:實(shí)例化,特點(diǎn)加載,初始化前后辦理,毀掉等。下面依據(jù)一個(gè)案例裝備,會(huì)更加的清楚。
1、編寫(xiě)B(tài)eanLife類(lèi)
publicclassBeanLifeimplementsBeanNameAware{privateStringname;publicStringgetName(){returnname;
}publicvoidsetName(Stringname){
System.out.println(“設(shè)置稱(chēng)號(hào):”+name);this.name=name;
}
@OverridepublicvoidsetBeanName(Stringvalue){
System.out.println(“BeanNameAware..SetName:”+value);
}publicvoidinitBean(){
System.out.println(“初始化Bean..”);
}publicvoiddestroyBean(){
System.out.println(“毀掉Bean..”);
}publicvoiduseBean(){
System.out.println(“運(yùn)用Bean..”);
}
@OverridepublicStringtoString(){return”BeanLife[name=”+name+”]”;
}
}
2、定制加載進(jìn)程
實(shí)現(xiàn)BeanPostProcessor接口。
publicclassBeanLifePostProcessorimplementsBeanPostProcessor{//初始化之前對(duì)bean進(jìn)行增強(qiáng)處理@OverridepublicObjectpostProcessBeforeInitialization(Objectobj,StringbeanName)throwsBeansException{
System.out.println(“初始化之前…”+beanName);returnobj;
}//初始化之后對(duì)bean進(jìn)行增強(qiáng)處理@OverridepublicObjectpostProcessAfterInitialization(Objectobj,StringbeanName)throwsBeansException{
System.out.println(“初始化之后…”+beanName);//改寫(xiě)B(tài)ean的稱(chēng)號(hào)if(objinstanceofBeanLife){
BeanLifebeanLife=(BeanLife)obj;
beanLife.setBeanName(“myBeanLifeTwo”);returnbeanLife;
}returnobj;
}
}
3、裝備文件
<beanclass=”com.spring.mvc.BeanLifePostProcessor”/><beanid=”beanLife”class=”com.spring.mvc.entity.BeanLife”init-method=”initBean”destroy-method=”destroyBean”><propertyname=”name”value=”myBeanLifeOne”/>bean>
4、測(cè)驗(yàn)進(jìn)程
測(cè)驗(yàn)代碼
publicclassTest08{@Testpublicvoidtest01(){
ApplicationContextcontext=newClassPathXmlApplicationContext(“/bean-value-06.xml”);
BeanLifebeanLife=(BeanLife)context.getBean(“beanLife”);
System.out.println(“測(cè)驗(yàn)成果BeanLife:”+beanLife.getName());
beanLife.useBean();//封閉容器((AbstractApplicationContext)context).close();
}
}
輸出成果
1、設(shè)置稱(chēng)號(hào):myBeanLifeOne2、BeanNameAware..SetName:beanLife3、初始化之前…beanLife4、初始化Bean..
5、初始化之后…beanLife6、BeanNameAware..SetName:myBeanLifeTwo7、測(cè)驗(yàn)成果BeanLife:myBeanLifeOne8、運(yùn)用Bean..
9、毀掉Bean..
這兒整理Bean的生命周期,進(jìn)程非常清晰。
廣州天河區(qū)珠江新城富力盈力大廈北塔2706
020-38013166(網(wǎng)站咨詢(xún)專(zhuān)線(xiàn))
400-001-5281 (售后服務(wù)熱線(xiàn))
深圳市坂田十二橡樹(shù)莊園F1-7棟
Site/ http://www.szciya.com
E-mail/ itciya@vip.163.com
品牌服務(wù)專(zhuān)線(xiàn):400-001-5281
長(zhǎng)沙市天心區(qū)芙蓉中路三段398號(hào)新時(shí)空大廈5樓
聯(lián)系電話(huà)/ (+86 0731)88282200
品牌服務(wù)專(zhuān)線(xiàn)/ 400-966-8830
旗下運(yùn)營(yíng)網(wǎng)站:
Copyright ? 2016 廣州思洋文化傳播有限公司,保留所有權(quán)利。 粵ICP備09033321號(hào)