隔了兩天,忙着面試,快累死了,終於有空來寫博客了。好了,發完牢騷,進入咱們今天的學習。面試
上篇spring學習4-bean配置文件中學習了使用xml配置文件配置bean,是否是以爲不淡定,每寫一個類,就得來註冊一下,xml文件得多大。好在spring中提供另外一種bean的配置方式,使用註解配置bean。spring
首先得了解一下註解,註解是jdk1.5才添加的新特性,具體註解怎麼寫,我就很少說了,我在osc博客裏搜到一篇很不錯的文章,不瞭解的童鞋能夠去瞧瞧Java註解總結。api
配置文件仍是免不了的,須要在配置文件中使用<context:component-scan>標籤才能讓spring去掃描註解。先準備一下前期工做吧。app
在spring的api文檔xsd-config能夠找到context的命名空間,把加粗的兩行加入到applicationContext.xml裏。框架
下一步,咱們在配置文件中加入bean掃描的標籤,其中只有一個屬性,base-package,指定須要掃描的包maven
< context:component-scan base-package ="com.example.spring" ></ context:component-scan >
這樣咱們的註解就能夠被掃描到了,工具
題外話,在網上搜到能夠用測試用例來測試咱們寫的代碼,不用每次都寫學習
ApplicationContext context = new ClassPathXmlApplicationContext( " applicationContext.xml " ); Car car = (Car) context.getBean( " car " );
這樣的代碼了。測試
-------------------------------------我是華麗的分割線---------------------------------------spa
先講一下怎麼測試
首先在pom.xml裏須要加入兩個包,一個是junit4,一個是spring的測試框架,原來建立maven工程自帶的junit版本過低,很差用。
< dependency > < groupId > org.springframework </ groupId > < artifactId > spring-test </ artifactId > < version > 3.2.8.RELEASE </ version > < scope > runtime </ scope > </ dependency > < dependency > < groupId > junit </ groupId > < artifactId > junit </ artifactId > < version > 4.11 </ version > </ dependency >
而後咱們寫一下測試類,就叫CarTest好了,名字隨便。
@RunWith(SpringJUnit4ClassRunner. class ) @ContextConfiguration(locations = " classpath:applicationContext.xml " ) public class CarTest { @Test public void demo1(){ } }
整個測試類框架大概就是這樣子
第一行@RunWith(SpringJUnit4ClassRunner.class)是整合spring和junit4用的
第二行@ContextConfiguration(locations="classpath:applicationContext.xml")是指定applicationContext.xml文件
demo1方法上的註解就是標註這個方法由junit運行,須要運行測試用例的時候按下圖來,在方法名上點右鍵,選debug as或是run as中的 JUnit Test便可,很是方便
-------------------------------------我是華麗的分割線再一次出現---------------------------------------
如今咱們修改一下以前的Car類和Engine類
在QiyouEngine類名上面一行添加 @Component("qiyouEngine"),這個的做用和xml配置中Bean id=」qiyouEngine」是同樣的
在Car類中咱們在private IEngine engine;上面添加兩個標記,第一標記標識自動裝配,這個標記是按類型進行裝配的,若是是有多個類實現了IEngine,就須要寫@Qualifier("qiyouEngine")指明bean的id是哪一個,否則spring會報錯,說找到多個實現了IEngine類。
@Autowired @Qualifier( " qiyouEngine " ) private IEngine engine;
這是一種寫法,spring推薦使用另外一個標籤@Resource,兩種方法效果是同樣的
@Resource(name = " qiyouEngine " ) private IEngine engine;
使用了自動裝配標籤,本來set的方法就能夠去掉了,spring使用的是asm工具,直接操做字節碼注入類,沒有set的方法也是能夠注入的。
最後須要說明的一點,註解的方式只試用類是咱們本身寫的,或是咱們能夠進行修改代碼的纔有用,若是是第三方類,就只能老老實實的用xml配置文件了。