Spring框架核心點:
- 依賴注入控制反轉(zhuǎn)(IOC/DI),。
- 面向切面AOP。
- 事務(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>