Spring Operation

Spring框架核心點:

  1. 依賴注入控制反轉(zhuǎn)(IOC/DI),。
  2. 面向切面AOP。
  3. 事務(wù)處理。

怎么獲取Spring容器的bean對象:

// 1.拿到Spring容器
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
// 2.獲取Spring容器的bean對象
HelloWolrd hw1 = (HelloWolrd) ac.getBean("helloWolrd");

怎么創(chuàng)建一個bean:

 <!--
   id:用來標示bean的唯一性
  class:用來指定需要加入IOC容器的類的路徑,這也可以通過反射機制在ioc容器中創(chuàng)建類,并返回指定的類。
   name:類中屬性的描述。
   value:屬性賦值。
 -->
<bean id="car" class="com.haw2.Car" >
      <property name="name" value="阿四"></property>
</bean>

創(chuàng)建一個抽象bean:

<!-- abstract:屬性用來描述該bean為抽象bean,只能被繼承不能被實現(xiàn) -->
<bean id="car" abstract="true">
    <property name="title" value="大眾" />
    <property name="speed" value="200"></property>
</bean>

創(chuàng)建一個繼承bean:

<!-- bean之間的繼承 通過parent屬性實現(xiàn)繼承bean,在sub bean中可以重寫sub bean的屬性 -->
<bean id="car2" parent="car" class="com.haw4.Car">
    <property name="speed" value="300"></property>
</bean>

創(chuàng)建一個依賴bean:

<!-- 通過depends-on屬性指定該bean所要依賴的其它bean,可以依賴多個,每個bean可以通過空格或者逗號分隔 -->
<bean id="person" class="com.haw4.Person" depends-on="car2 address">
    <property name="name" value="dawei" />
    <property name="car" ref="car2" />
    <property name="address" ref="address" />
</bean>

設(shè)置bean的作用域

<!-- 
通過scope屬性配置該的作用域 
默認有四種方式:
1.prototype:初始化不會創(chuàng)建所有的bean對象,根據(jù)每次請求動態(tài)創(chuàng)建bean對象,并返回
2.request:
3.session:
4.sigleto:bean默認的作用域,初始化會創(chuàng)建所有的bean對象,容器中的bean只會在容器中創(chuàng)建一次。
-->

<bean id="car" class="com.haw5.Car" scope="">
    <property name="title" value="mazida"/>
</bean>

引入properties文件:

<!-- spring2.5之后提供的引人properties文件的方式 -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- spring2.5之前提供的引人properties文件的方式 -->
<!-- 
  <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
        <property name="location" value="classpath:db.properties"/>
 </bean>

添加jdbc配置:

<!-- SpEL表達式需要注意 "${value}" -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="user" value="${user}" />
        <property name="password" value="${password}" />
        <property name="driverClass" value="${driver}" />
        <property name="jdbcUrl" value="${url}" />
    </bean>

SPEL表達式語言使用

<!-- spel表達式語言 格式"#{value}" 需要注意 字符必須通過單引號包裹 -->
    <bean id="person" class="com.haw7.Person" p:name="#{'張三'}" p:car="#{car}"
        p:address="#{address.localhost}" p:info="#{car.speed > 100 ? '超速' : '正常行駛'}">
        <!-- <property name="name" value="#{'張三'}"/> -->
        <!-- <property name="car" value="#{car}"/> -->
        <!-- <property name="address" value="#{address.localhost}"/> -->
        <!-- <property name="info" value="#{car.speed > 100 ? '超速' : '正常行駛'}"/> -->
    </bean>

使用注解必須在spring配置文件中引入一下標簽

<!-- 掃描指定包獲取將注解的類加入到ioc容器中  base-package掃描包的范圍-->
<context:component-scan base-package="com.haw">
</context:component-scan>
@Component
@Service("userService")
@Repository

@Autowired

Bean的聲明周期

<!-- 
    bean的聲明周期分為5個階段:
    1.初始化bean的構(gòu)造函數(shù)
    2.設(shè)置bean的屬性參數(shù)
    3.調(diào)用bean初始化方法
    4.執(zhí)行bean中的方法
    5.調(diào)用bean的銷毀方法
    
    bean的初始化方法和銷毀方法都是在自身設(shè)置
    比如初始化方法,可以通過init-mehtod方法指定bean中的初始化方法。
    比如銷毀方法,可以通過destroy-method方法指定bean的銷毀發(fā)發(fā)。
     -->
    <bean id="car" class="com.haw.cycle.Car" init-method="init" destroy-method="destroy">
        <property name="name" value="大眾"/>
    </bean>

Bean的前后置處理器

<!-- 
    bean的后置處理器注冊,無需id標示,spring容器會自動識別改方法
    通過ioc容器創(chuàng)建bean對象,通過繼承BeanPostprocess類可以攔截bean對象做一些操作
    spring會提供兩個方法:
    postProcessBeforeInitialization(Object arg0, String arg1):在初始化方法前執(zhí)行
     postProcessAfterInitialization(Object arg0, String arg1):在初始化方法后執(zhí)行
     -->
    <bean class="com.haw.cycle.MyBeanPostProcess"/>

靜態(tài)工廠方法配置Bean

<!-- 
靜態(tài)工廠方法配置bean,需要注意不是配置靜態(tài)工廠方法實例,而是配置bean實例
直接調(diào)用靜態(tài)方法
 -->
<bean id="staticCar" class="com.haw.factory.StaticFactory"
    factory-method="getCar">
    <constructor-arg value="baoma" />
</bean>

實例工廠方法配置Bean

<!-- 
實例工廠方法配置bean,需要注意不是配置實例工廠方法實例,而是配置bean實例
1. 創(chuàng)建對象
2. 調(diào)用實例方法
-->
 <bean id="instanceCar" class="com.haw.factory.InstanceFactory"/>
<bean id="car2" factory-bean="instanceCar" factory-method="getInstanceCar">
  <constructor-arg value="biyadi"/>
</bean>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,937評論 18 139
  • Spring 概述 什么是spring? Spring 是個java企業(yè)級應(yīng)用的開源開發(fā)框架。Spring主要用來...
    Bugtags閱讀 3,450評論 4 192
  • Spring簡介: Spring是一個IOC(DI)和AOP容器框架: 輕量級:Spring是非侵入性的,基于開發(fā)...
    JHMichael閱讀 623評論 0 3
  • 初中那會覺得自己長得很丑,時常覺得自卑,也不敢跟男生多說幾句。 大學(xué)的時候,某一天無意翻到初中的團員證,竟有些詫異...
    鐘小笛閱讀 1,453評論 2 7
  • 看過很多次《致青春》,每一次都有不同的感悟。我常常想每一個人的生命中都應(yīng)該有一個林靜和陳孝正,即使都不能走到最后,...
    bf031c6b7b6f閱讀 501評論 0 0