Spring表達(dá)式語(yǔ)言(簡(jiǎn)稱SpEL):是一個(gè)支持運(yùn)行時(shí)查詢和操作圖的強(qiáng)大的表達(dá)式語(yǔ)言
語(yǔ)法類(lèi)似EL:SpEL使用${...}作為界定符习霹,所有在大括號(hào)中的字符都將被認(rèn)為是SpEL
通過(guò)SpEL可以實(shí)現(xiàn):
通過(guò)bean的id對(duì)bean進(jìn)行引用
調(diào)用方法以及引用方法中的屬性
計(jì)算表達(dá)式的值
正則表達(dá)式的匹配
SpringIOC容器對(duì)Bean的生命周期進(jìn)行管理的過(guò)程:
通過(guò)構(gòu)造器或工廠方法創(chuàng)建Bean 實(shí)例
為Bean的屬性設(shè)置值和對(duì)其他Bean的引用
調(diào)用Bean的初始化方法
Bean可以使用了
當(dāng)容器關(guān)閉時(shí),調(diào)用Bean的銷(xiāo)毀方法
在Bean的聲明里設(shè)置init-method和destroy-method屬性炫隶,為Bean指定初始化和銷(xiāo)毀方法
Bean后置處理器允許在調(diào)用初始化方法前后對(duì)Bean進(jìn)行額外的處理
Bean后置處理器對(duì)IOC容器里所有的Bean實(shí)例逐一處理淋叶。而非單一實(shí)例。
實(shí)現(xiàn)方法:
創(chuàng)建一個(gè)實(shí)現(xiàn)某個(gè)java接口的類(lèi)伪阶,實(shí)現(xiàn)其中的兩個(gè)方法
在Spring IOC中配置Bean
通過(guò)工廠方式配置bean
靜態(tài)工廠方法:直接調(diào)用某一個(gè)類(lèi)的靜態(tài)方法就可以返回bean的實(shí)例
class屬性:指向靜態(tài)工廠方法的全類(lèi)名
factory-method:指向靜態(tài)工廠方法的名字
?constructor-arg:如果工廠方法需要傳入?yún)?shù)煞檩,則使用
實(shí)例工廠方法:實(shí)例工廠的方法,即先需要?jiǎng)?chuàng)建工廠本身栅贴,再調(diào)用工廠的實(shí)例方法
factory-bean屬性:指向?qū)嵗S方法的bean
factory-method:指向靜態(tài)工廠方法的名字
constructor-arg:如果工廠方法需要傳入?yún)?shù)斟湃,則使用
通過(guò)FactoryBean配置Bean
自定義的FactoryBean需要實(shí)現(xiàn)FactoryBean接口
在配置文件中,通過(guò)FactoryBean來(lái)配置Bean的
class:指向FactoryBean的全類(lèi)名
property:配置FactoryBean的屬性
但實(shí)際返回的卻是FactoryBean的getObject()方法返回的實(shí)例
通過(guò)注解配置bean
Spring能夠從classpath下自動(dòng)掃描檐薯,偵測(cè)和實(shí)例化具有特定注解的組件
特定組件包括:
@Component:基本注解凝赛,標(biāo)識(shí)了一個(gè)受Spring管理的組件
@Responsitary:標(biāo)識(shí)持久層組件
@Service:標(biāo)識(shí)服務(wù)層(業(yè)務(wù)層)組件
@Controller:標(biāo)識(shí)表示層組件
Spring有默認(rèn)的命名策略
也可以在注解中通過(guò)value屬性標(biāo)識(shí)組件的名稱
context:exclude-filter 子節(jié)點(diǎn)排除哪些指定表達(dá)式的組件
context:include-fiter? 子節(jié)點(diǎn)指定包含哪些表達(dá)式的組件,該子節(jié)點(diǎn)需要use-default-fiters配合使用
指定Spring容器掃描的包:
<context:component-scan base-package="包名">Spring會(huì)掃描這個(gè)基類(lèi)包里及其子包里的所有類(lèi)
<context:component-scan>元素還會(huì)自動(dòng)注冊(cè)AutowiredAnnotationBeanPostProcessor實(shí)例坛缕,該實(shí)例可以自動(dòng)裝配具有@Autowired和@Resourse哄酝、@Inject注解的屬性