乾貨2:Java開發必用的框架Spring

Spring框架的全面理解

乾貨2:Java開發必用的框架Spring

Spring是一個輕量級的應用框架,可以簡化企業級開發,降低侵入性;Spring的本質是管理軟件中的對象,創建對象和維護對象之間的關係;Spring提供IOC和AOP功能,可以降低組件的耦合度;便於系統的維護和升級;

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

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

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

Spring容器創建Bean對象的3種方法;

方法一:重點是用構造器來實例化;

方法二;使用靜態工廠的方法來實例化;

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

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

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

id或name用於指定Bean的屬性,class用於指定Bean的類型,會自動調用無參數構造器來創建對象;

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

id用於指定Bean的屬性;

class用於指定工廠中創建Bean對象的靜態方法;必須是static修飾的靜態方法;

如果你想學習Java可以來這個羣,首先是二二零,中間是一四二,最後是九零六,裏面有大量的學習資料可以下載。

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

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

factory-method="靜態方法名,不含括號"/>

factory-method屬性用於指定共產共

id或name用於指定Bean的屬性,class用於指定Bean的類型,會自動調用

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

id用於指定Bean的屬性;

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

factory-method屬性用於指定工廠中創建的Bean靜態方法;

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

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

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

乾貨2:Java開發必用的框架Spring

bean的生命週期:

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

指定銷燬回調方法:僅適用於單例singleton模式的bean;<bean id="xxx" class="xx.xx.xx" destroy-method="destroy"/>

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

IOC

乾貨2:Java開發必用的框架Spring

IOC是Inversion of Control控制反轉;是指由最初的new方式創建對象轉變爲第三方框架創建對象,注入DI,降低了對象之間的耦合度;

spring容器採用了依賴注入的方式實現了IOC控制反轉;

DI稱爲Dependency Injection依賴注入;

依賴注入的原理是:將具有關係的對象,通過構造器方法參數或方法參數傳入簡歷關聯;

IOC是一種思想,DI是實現IOC的主要技術途徑;

注入對象:

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

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

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

注入參數的值:

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會自動掃描該包及其子包所有組件.當發現組件類,前有特定的註解標記的時候,將該組件納入到Spring容器中;等價於XML中配置的<bean>定義;

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

在類名前面添加註解;

@Component或@Named 通用註解

@Repository 持久層註解

@Service 業務層註解

@Controller 控制層註解

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

@Lazy(true) 延遲加載註解,只有調用getBean()方法纔會調用;

類前面的註解,註解後面緊跟的id默認爲該類名的首字母小寫;也可以不寫;

@Component(id="example")

public class Example implements Serializable{

}

在方法前面添加的註解

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

@PreDestroy指定銷燬毀掉方法的註解

指定依賴注入的關係

@Autowired寫在方法的前面,聲明需要爲方法注入bean; @Autowired適用於setter注入和構造器注入;不用導包;

@Resource只適用於setter注入;

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

@Inject或者@Named 適用於setter注入和構造器注入,需要額外導入包;不推薦使用;

在方法中的參數前面添加的註解

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

注入Spring表達式值;

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

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

注:以上是Spring知識的全面剖析,也是開發過程中常用的知識,面試也常被問到控制反轉等,喜歡的朋友可以收藏,歡迎大家踊躍評論!謝謝!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章