1. 程式人生 > >Spring的學習(二):裝配Bean

Spring的學習(二):裝配Bean

Spring容器負責建立應用程式中的bean並通過DI來協調這些物件之間的關係。當描述bean如何進行裝配時,Spring具有非常大的靈活性,它提供了三種主要的裝配機制:

  • 在XML中進行顯示配置
  • 在Java中進行顯示配置
  • 隱式的bean發現機制和自動裝配

1.自動化裝配bean

Spring從兩個角度來實現自動化裝配:

  • 元件掃描:Spring會自動發現應用上下文中所建立的bean
  • 自動裝配:Spring自動滿足bean之間的依賴 元件掃描和自動裝配組合在一起就能發揮出強大的威力,它們能夠將你的顯式配置降低到最少。

元件掃描:使用@ComponentScan註解會自動掃描包下所有使用@Service

、@Component、@Repository、@Controller類並註冊成為Bean(可以更改包的名稱)。

自動裝配:@Autowired可以對成員變數、方法、建構函式進行註釋(預設按照型別進行裝配)。

2.通過Java程式碼裝配bean

有些場景是沒有辦法使用自動化裝配的,如要將第三方庫中的元件裝配到你的應用中(這種沒有辦法對類使用註解,不能夠更改原始碼),可以使用顯示裝配的方式。顯示裝配又分為XML和Java。我們先來介紹一下Java程式碼裝配的方式。

步驟: (1)建立配置類 新建一個配置類,使用@Configuration註解。(相當於XML方法中對應的xml檔案) (2)宣告簡單的bean

在配置類的中的方法上使用@Bean註解,告訴Spring這個方法會返回一個物件,該物件要註冊為Spring應用上下文中的bean。方法體中包含了最終產生bean例項的邏輯。(相當於xml檔案中的bean標籤) (3)藉助JavaConfig實現注入 在JavaConfig中裝配bean的最簡單的方式就是引入建立bean的方法。如:

@Configuration
public class CDPlayerConfig(){
	@Bean
	public CompactDisc compactDisc(){
		return new CompactDisc();
	}
	@Bean
	public
CDPlayer cdPlayer(){ return new CDPlayer(compactDisc()); } }

3.使用XML裝配bean

步驟: (1)建立XML配置規範: 在使用XML為Spring裝配bean之前,你需要建立一個新的配置規範。在使用JavaConfig的時候,這意味著要建立一個帶有@Configuration註解的類,而在XML配置中,這意味著要建立一個XML檔案,並且要以beans標籤元素為根。

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
				http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
				http://www.springframework.org/schema/tx 
				http://www.springframework.org/schema/tx/spring-tx.xsd"
	xmlns:tx="http://www.springframework.org/schema/tx">
</beans>

(2)宣告一個簡單的bean標籤

<bean class="soundsystem.CompactDisc" />

(3)注入 例如:

<bean id="dataSource"
	class="org.apache.commons.dbcp.BasicDataSource">
	<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
	<property name="url" value="jdbc:mysql://localhost:3306/test"></property>
</bean>
<bean id="sessionFactory"
	class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
	<property name="dataSource">
		<ref bean="dataSource" />
	</property>
</bean>

將dataSource注入到了sessionFactory中。