java干貨分享——Spring框架的全面理解

Spring框架的全面理解

Spring是一個輕量級的應用框架,可以簡化企業(yè)級開發(fā),降低侵入性;Spring的本質(zhì)是管理軟件中的對象,創(chuàng)建對象和維護對象之間的關系;Spring提供IOC和AOP功能,可以降低組件的耦合度;便于系統(tǒng)的維護和升級;

Spring容器的種類有兩種:BeanFactory(父接口)和ApplicationContext(子接口);ApplicationContext擁有較多的企業(yè)及方法,推薦使用ApplicationContext接口;

BeanFactory和ApplicationContext是維護Bean和相互依賴的高級工廠接口;調(diào)用getBean("id名")方法獲取bean的實例;

Spring容器的實例化(也叫啟動容器):ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContextr.xml");

Spring容器創(chuàng)建Bean對象的3種方法;

方法一:重點是用構(gòu)造器來實例化;

方法二;使用靜態(tài)工廠的方法來實例化;

方法三:使用實例工廠的方法來實例化;

方法一:<bean id="xxxx" class="xxx.xx.xx"/>或者

<bean name="xxxx" class="xxx.xx.xx"/>

id或name用于指定Bean的屬性,class用于指定Bean的類型,會自動調(diào)用無參數(shù)構(gòu)造器來創(chuàng)建對象;

方法二:<bean id="xxxx" class="xxx.xx.xx" factory-method="靜態(tài)方法名,不含括號"/>

id用于指定Bean的屬性;

class用于指定工廠中創(chuàng)建Bean對象的靜態(tài)方法;必須是static修飾的靜態(tài)方法;

方法三:<bean id="xxx1" class="xxx.xx.xx"/>

<bean id="xxx2" factory-bean="xxx1"

factory-method="靜態(tài)方法名,不含括號"/>

factory-method屬性用于指定共產(chǎn)共

id或name用于指定Bean的屬性,class用于指定Bean的類型,會自動調(diào)用

id或name用于指定Bean的屬性;

id用于指定Bean的屬性;

factory-bean屬性用于指定工廠Bean對象;

factory-method屬性用于指定工廠中創(chuàng)建的Bean靜態(tài)方法;

bean的作用域:默認的情況下,一個bean配置,容器只會創(chuàng)建一個實例;

可以通過scope屬性,調(diào)用getBean()方法創(chuàng)建新的實例;scope="prototype";

bean的延遲加載:添加lazy-init=true;

bean的生命周期:

指定初始化回調(diào)方法:<bean id="xxx" class="xx.xx.xx" init-method="init"/>

指定銷毀回調(diào)方法:僅適用于單例singleton模式的bean;<bean id="xxx" class="xx.xx.xx" destroy-method="destroy"/>

Bean的作用域:默認的情況下,一個bean陪

IOC

IOC是Inversion of Control控制反轉(zhuǎn);是指由最初的new方式創(chuàng)建對象轉(zhuǎn)變?yōu)榈谌娇蚣軇?chuàng)建對象,注入DI,降低了對象之間的耦合度;

spring容器采用了依賴注入的方式實現(xiàn)了IOC控制反轉(zhuǎn);

DI稱為Dependency Injection依賴注入;

依賴注入的原理是:將具有關系的對象,通過構(gòu)造器方法參數(shù)或方法參數(shù)傳入簡歷關聯(lián);

IOC是一種思想,DI是實現(xiàn)IOC的主要技術途徑;

注入對象:

DI注入對象的方式setter注入,構(gòu)造器注入,接口注入;其中接口注入最常用;

Spring IOC容器也可以自動裝配;默認的時候是禁止自動裝配的;autowire="no";

autowire的值:no,byName,byType,constructor,autodetect;

注入?yún)?shù)的值:

1.注入基本類型的值和集合類型的值;

<bean id="xxx" xlass="xxx.xxx.xxx">

<property name="xxx" value="xxxx"/>

</bean>

2.引用的方式注入外部的bean,方便重用;

<bean id="xxx1" xlass="xxx.xxx.xxx1">

<property name="xxx" value="xxxx"/>

</bean>

<bean id="xxx" xlass="xxx.xxx.xxx2">

<property name="xxx" ref="xxx1"/>

</bean>

3.注入Spring表達式的值;

<util:properties id="xxx" location="classpath:文件名"></util>

<bean id="xxx" class="xx.xx.xx">

<property name="xxx" value="#{xx.屬性}"/>

<property name="xxx" value="#{xx.屬性}"/>

<property name="xxx" value="#{xx.屬性}"/>

</bean>

4.注入Null或空字符串

<bean id="xxx" xlass="xxx.xxx.xxx2">

<property name="xxx" value=""/>

</bean>

注入Null

<bean id="xxx" xlass="xxx.xxx.xxx2">

<property name="xxx">

<null/>

<property/>

</bean>

基于注解的組件掃描:

指定一個包路徑,Spring會自動掃描該包及其子包所有組件.當發(fā)現(xiàn)組件類,前有特定的注解標記的時候,將該組件納入到Spring容器中;等價于XML中配置的<bean>定義;

<context:component-scan base-package="org.xxx.xxx"/>

在類名前面添加注解;

@Component或@Named 通用注解

@Repository 持久層注解

@Service 業(yè)務層注解

@Controller 控制層注解

@Scope("prototype") 組件作用域注解

@Lazy(true) 延遲加載注解,只有調(diào)用getBean()方法才會調(diào)用;

類前面的注解,注解后面緊跟的id默認為該類名的首字母小寫;也可以不寫;

@Component(id="example")

public class Example implements Serializable{

}

在方法前面添加的注解

@PostConstruct指定初始化方法的注解

@PreDestroy指定銷毀毀掉方法的注解

指定依賴注入的關系

@Autowired寫在方法的前面,聲明需要為方法注入bean; @Autowired適用于setter注入和構(gòu)造器注入;不用導包;

@Resource只適用于setter注入;

如果注入的是對象是單例的,@Resource(name="注入的類名首字母小寫"),(name="")可以省略;

@Inject或者@Named 適用于setter注入和構(gòu)造器注入,需要額外導入包;不推薦使用;

在方法中的參數(shù)前面添加的注解

@Qualifier 聲明需要注入的bean的id;如果注入的對象是單例,@Qualifier可以省略不寫;

注入Spring表達式值;

在屬性或者setter方法前面使用@Value("#{const.PAGE_SIZE}");

@Value("Nihao")也可以注入基本類型的值;

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容