這篇文章主要為大家展示了“Spring中bean基礎(chǔ)知識(shí)的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Spring中bean基礎(chǔ)知識(shí)的示例分析”這篇文章吧。
專注于為中小企業(yè)提供成都網(wǎng)站制作、做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)梁子湖免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000+企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
Bean:
在Spring技術(shù)中是基于組件的
最基本了是最常用的單元
其實(shí)實(shí)例保存在Spring的容器當(dāng)中
Bean通常被定義在配置文件當(dāng)中,Bean實(shí)例化由Spring的Ioc容器進(jìn)行管理,Bean的實(shí)例可以通過(guò)Beanfactory進(jìn)行訪問(wèn),實(shí)際上大部分J2EE應(yīng)用,Bean是通過(guò)ApplicationContext來(lái)訪問(wèn)的,ApplicationContext是BeanFactory的子接口,功能要比BeanFactory強(qiáng)大許多
在前面得博客依賴注入與控制反轉(zhuǎn)中演示了應(yīng)用spring實(shí)現(xiàn)ioc,在ApplicationContext.xml中有bean的配置,里面只是bean簡(jiǎn)單的應(yīng)用。這篇主要是進(jìn)一步學(xué)習(xí)使用bean。
一、定義
上面的代碼是之前博客配置的,可以看到bean的基本構(gòu)成。
是Sring配置文件的根節(jié)點(diǎn),一個(gè)
節(jié)點(diǎn)里面可以有多個(gè)
節(jié)點(diǎn)。在bean中常用兩個(gè)屬性:ID,Class. ID是一唯一標(biāo)識(shí),來(lái)確定是哪個(gè)bean,可以讓其他bean中使用id引用。class用來(lái)指定是哪個(gè)class。同時(shí)還可以設(shè)置scope屬性,scope有兩種:singleton,non-singelton。singleton:?jiǎn)螌?shí)例模式(默認(rèn),構(gòu)造方法為private),整個(gè)Spring的容器中只有一個(gè)共享實(shí)例存在(singleton)。non-singelton:每次請(qǐng)求該bean,Spring容器都會(huì)新建立一個(gè)bean實(shí)例,然后返回給程序(request,session,prototype)。
二、創(chuàng)建
Bean的命名機(jī)制
id 當(dāng)在Spring的窗口當(dāng)中,查找某個(gè)Bean對(duì)象時(shí),首先根據(jù)id進(jìn)行查找,將其余作為Bean的默認(rèn)名稱,如果ID屬性不存在,則根據(jù)Name屬性進(jìn)行查找(將其中的第一個(gè)名稱作為默認(rèn)的名稱),如果ID和NAME都不存在根據(jù)類的名稱進(jìn)行查找。id---------->name--------------->類名。
Bean的別名:可以使用alias來(lái)為bean指定別名.
下面的配置文件還是在上面的xml基礎(chǔ)上修改的。這里配置了ID為ServiceImpl的bean設(shè)置了別名。我們可以使用它的name、id、alias來(lái)獲取service。
package Cuiyw.SpringAop; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import Cuiyw.Spring.IService.IService; public class App { public static void main( String[] args ) { ApplicationContext context=new ClassPathXmlApplicationContext(new String[]{"ApplicationContext.xml"}); BeanFactory factory=context; IService service=(IService)factory.getBean("ServiceA1"); service.service("Cuiyw ServiceA1"); service=(IService)factory.getBean("ServiceA"); service.service("Cuiyw ServiceA"); service=(IService)factory.getBean("ServiceImpl"); service.service("Cuiyw ServiceImpl"); } }
三、注入
1.基本類型和string
可以使用value元素來(lái)設(shè)置,在上面的代碼基礎(chǔ)上稍作修改
package Cuiyw.Spring.Service; import Cuiyw.Spring.IDao.IDao; import Cuiyw.Spring.IService.IService; public class ServiceImpl implements IService{ private IDao dao; private int baseProperty; public IDao getDao() { return dao; } public void setDao(IDao dao) { this.dao = dao; } public void service(String name) { System.out.println(dao.sayHello(name)+" baseProperty:"+getBaseProperty()); } public int getBaseProperty() { return baseProperty; } public void setBaseProperty(int baseProperty) { this.baseProperty = baseProperty; } }
對(duì)于string類型,XML解析器以String類型解析出數(shù)據(jù),如果屬性不是String類型,屬性值會(huì)通過(guò)PropertyEditors轉(zhuǎn)換為其他類型,比如時(shí)間類型.
2.注入bean
上面的代碼中就注入了bean,在ServiceImpl中注入DaoImpl。可以使用ref來(lái)進(jìn)行配置。
3.注入集合
常見(jiàn)的集合有l(wèi)ist、map、set、property等,下面的代碼是在ServiceImpl中定義了幾個(gè)屬性,然后在上下文中通過(guò)屬性注入進(jìn)去。為了測(cè)試,在DaoImpl中也增加了一個(gè)屬性s。
package Cuiyw.Spring.Dao; import java.util.Calendar; import Cuiyw.Spring.IDao.IDao; public class DaoImpl implements IDao{ public String s; public String getS() { return s; } public void setS(String s) { this.s = s; } public String sayHello(String name) { int hour=Calendar.getInstance().get(Calendar.HOUR_OF_DAY); if(hour<6) return "凌晨早,"+name; if(hour<12)return "早上好,"+name; if(hour<13)return "中午好,"+name; if(hour<18)return "下午好,"+name; return "晚上好,"+name+", s="+s; } }
package Cuiyw.Spring.Service; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; import Cuiyw.Spring.IDao.IDao; import Cuiyw.Spring.IService.IService; public class ServiceImpl implements IService{ private IDao dao; private int baseProperty; private List
主要是注入的配置,在list、map、set屬性中都是配置了一個(gè)基礎(chǔ)類型value=1,兩個(gè)DaoImpl類型。
1 prokeyA prokeyB
執(zhí)行main方法可以看到屬性都注入進(jìn)去了。
4.自定義屬性編輯器
對(duì)于有一些屬性是沒(méi)法注入的,此時(shí)就需要自定義,比如上面說(shuō)的日期類型。
首先是要定義一個(gè)繼承PropertyEditorSupport的類,重寫setAsText方法。
package Cuiyw.Spring.Service; import java.beans.PropertyEditorSupport; import java.text.ParseException; import java.text.SimpleDateFormat; public class CustomerProperty extends PropertyEditorSupport { private String format="yyyy-MM-dd"; public String getFormat() { return format; } public void setFormat(String format) { this.format = format; } @Override public void setAsText(String text) throws IllegalArgumentException { // TODO Auto-generated method stub SimpleDateFormat sdf=new SimpleDateFormat(format); //super.setAsText(text); try { //轉(zhuǎn)換對(duì)象,能過(guò)setValue方法重新賦值 this.setValue(sdf.parse(text)); } catch (ParseException e) { e.printStackTrace(); } } }
然后在配置文件配置這個(gè)類
這里還是在ServiceImpl中增加了一個(gè)java.util.Date
類型的date屬性。并在配置文件注入值。
以上是“Spring中bean基礎(chǔ)知識(shí)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!