Spring注解開發(fā)
- 注解改造spring配置文件
從注解開發(fā)開始,這里的一切都變得十分簡化。
包括后面的大量開發(fā)實戰(zhàn),我們的注解開發(fā)都會派上大的用處。
注解設置bean
那么我們的bean就不再xml文件里面進行定義了。具體怎么做呢?
我們可以這樣舉個例子。先創(chuàng)建一個接口,放在dao層,然后創(chuàng)建sevice包,在這里我們創(chuàng)建接口service繼承dao,然后在改包下創(chuàng)建impl,里面創(chuàng)建類來實現(xiàn)sevice接口類。
具體如下
package com.jgdabc.dao;public interface Bookdao { void save();}package com.jgdabc.service;import com.jgdabc.dao.Bookdao;public interface BookService extends Bookdao { @Override void save();}package com.jgdabc.service.impl;import com.jgdabc.service.BookService;public class BookDaoServiceImp implements BookService { @Override public void save() { }}
我們?nèi)缓筮@樣操作這個實現(xiàn)類
package com.jgdabc.service.impl;import com.jgdabc.dao.Bookdao;import com.jgdabc.service.BookService;import org.springframework.stereotype.Component;@Component(“bookDao”)public class BookDaoServiceImp implements BookService { @Override public void save() { System.out.println(“bookdaoservice impl is runnning”); }}
非常重要的一件事,在BookDaoImpl類上添加@Component 注解。到底是什么用處呢?
例如這樣,我們上面的代碼與此類似
然后呢,我們還是需要去spring 的配置文件配置一下。你要開啟包掃描
然后運行
但是包括包掃描,開啟命名空間,其實都需要在配置文件上添加配置,比較容易出現(xiàn)錯誤。我們后面可以將配置文件也按照注解開發(fā)。
component-scan
component:組件,Spring將管理的bean視作自己的一個組件scan:掃描
base-package指定Spring框架掃描的包路徑,它會掃描指定包及其子包中的所有類上的注解。包路徑越多[如:com.jgdabc.dao.impl],掃描的范圍越小速度越快
包路徑越少[如:com.jgdabc],掃描的范圍越大速度越慢
一般掃描到項目的組織名稱即Maven的groupId下[如:com.jgdabc]即可。
注意
@Component注解如果不起名稱,會有一個默認值就是當前類名首字母小寫,所以也可以按照名稱獲取
對于@Component注解,還衍生出了其他三個注解@Controller 、@Service 、@Repository
這幾個注解的功能是一樣的,只是設定這樣的名字便于我們區(qū)分具體功能。
方便我們后期在編寫類的時候能很好地區(qū)分出這個類是屬于表現(xiàn)層、業(yè)務層還是數(shù)據(jù)層的類。
注解改造spring配置文件
首先將原來的配置文件刪掉。因為實在太麻煩。或者你可以注銷掉。我們使用注解的方式。
這樣這個之前的配置文件就不會再起作用了。
然后我們創(chuàng)建一個config的目錄。下面創(chuàng)建配置類。
難道你創(chuàng)建一個配置類,spring就會認為你這個類就是它的配置類?不會的。
我們用注解告訴他
上次我們用的是在xml配置掃描,現(xiàn)在我們用注解掃描bean。
現(xiàn)在我們運行App測試類,照樣也可以運行出來。這個就真的方便太多了。
總結(jié)以上的過程
注解掃描的話,可以掃描多級。需要這樣去寫,舉個例子
之前我們讀取配置方式改一下
import com.jgdabc.config.SpringConfig;import com.jgdabc.dao.Bookdao;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class App { public static void main(String[] args) { // ApplicationContext ctx = new ClassPathXmlApplicationContext(“SpringConfig.xml.bak”);// DataSource dataSource = (DataSource) ctx.getBean(“dataSource”);// System.out.println(dataSource);// DataSource dataSource01= (DataSource) ctx.getBean(“datasource01”);// System.out.println(dataSource01); AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class); Bookdao bookDao = (Bookdao) ctx.getBean(“bookDao”); bookDao.save(); }}
起步就這么簡單。
未完續(xù)更。