Spring實戰筆記二
一、Spring配置的方式
spring容器用來創建應用程序中的bean,並通過DI來協調這些對象間的關系。
在bean進行裝配時,spring提供了三種主要的裝配機制。
①在XML中進行顯式配置
②在Java中進行顯式配置
③隱式的bean發現機制和自動裝配
二、自動化裝配bean
1、spring從兩個角度來實現自動化裝配
①組件掃描(component scanning):Spring會自動發現應用上下文中所創建的bean
②自動裝配(autowiring):Spring自動滿足bean之間的依賴
示例:
①:定義一個接口
package soundsystem; public interface CompactDisc { void play(); }
②創建實現類,並且加自動掃描的標簽@Component,該標簽會告知spring為這個類創建bean。
1 package soundsystem; 2 3 import org.springframework.stereotype.Component; 4 5 @Component 6 public class SgtPeppers implements CompactDisc {7 8 public void play() { 9 System.out.println("繼承接口!"); 10 } 11 12 }
③組件掃描默認是不啟動的,我們需要顯示的配置Spring。讓它去尋找帶有@Component註解的類,並為其創建bean。
方式一:Java代碼啟用組件掃描。
如果沒有其他的配置,@ComponentScan默認會掃描與配置類相同的包,及其報下,所有子包。
package soundsystem; import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan public class CDPlayerConfig { }
方式二:通過XML配置來啟用組件掃描。
<context:component-scan base-package="soundsystem"/>
④:測試組件掃描能夠發現CompactDisc
package test; import java.util.Date; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import soundsystem.CDPlayerConfig; import soundsystem.SgtPeppers; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes=CDPlayerConfig.class) public class TEST { @Autowired private SgtPeppers sgtPeppers; @Test public void cdshouNotNull(){ System.out.println("null"); } }
2、為組件掃描的bean命名
Spring會自動將類名的第一個字母小寫,作為相應bean的名字。
如果想要,自己為bean命名,則如下:
@Component("MyCd") public class SgtPeppers implements CompactDisc { public void play() { System.out.println("繼承接口!"); }
3、設置組件掃描的基礎包
@ComponentScan沒有任何屬性,它會以本包為基礎包,來掃描組件
①:@ComponentScan("包名")
@ComponentScan(basePackages="包名")
@ComponentScan(basePackages={"包名1","包名2",....})
以上的包名為String類型,是類型不安全的。
②:@ComponentScan(basePackageClasses={bao1.class,bao2.class})
通過這種方式,這些類所在的包會作為組件掃描的基礎包。
在使用這種方式時,可以在包中創建一個用來掃描的空標記接口。
三、Java代碼裝配bean
1、創建配置類,使用@Configuration標記。
package soundsystem; import org.springframework.context.annotation.Configuration; @Configuration public class CDPlayerConfig { }
2、聲明bean,使用@Bean標記
@Bean會告訴Spring這個方法將會返回一個對象,該對象要註冊為Spring應用上下文中的bean。
默認情況下,bean的ID是和帶@Bean的方法名是一樣的,在下例中,bean的名字是sgtPepper。
若想自己設置bean的名字,可以通過@Bean的name屬性:@Bean(name="xxxx")
package soundsystem; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class CDPlayerConfig { @Bean public CompactDisc sgtPepper(){ return new SgtPeppers(); } }
3、借助JavaConfig實現註入
Spring將會攔截所有對添加了@Bean標記的方法的調用,確保添加@Bean的方法只調用一次。
使用@Bean標記的方法,可以使用任何的java方式來產生bean。
四:XML配置bean。
五:導入和混合配置
1、JavaConfig中引用XML配置
①一個JavaConfig引用另一個JavaConfig,使用@Import(xxx.class)/@Import({xxx.class,yyy.class})
②一個JavaConfig引用XML配置,使用@ImportResource("classpath:xxx.xml")
2、XML配置中引用JavaConfig
應用<bean>標簽,將JavaConfig引入即可
<bean class="soundsystem.CDConfig">
Spring實戰筆記二