Spring注解開(kāi)發(fā)
- 注解改造spring配置文件
從注解開(kāi)發(fā)開(kāi)始,這里的一切都變得十分簡(jiǎn)化。
包括后面的大量開(kāi)發(fā)實(shí)戰(zhàn),我們的注解開(kāi)發(fā)都會(huì)派上大的用處。
注解設(shè)置bean
那么我們的bean就不再xml文件里面進(jìn)行定義了。具體怎么做呢?
我們可以這樣舉個(gè)例子。先創(chuàng)建一個(gè)接口,放在dao層,然后創(chuàng)建sevice包,在這里我們創(chuàng)建接口service繼承dao,然后在改包下創(chuàng)建impl,里面創(chuàng)建類來(lái)實(shí)現(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)缓筮@樣操作這個(gè)實(shí)現(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 的配置文件配置一下。你要開(kāi)啟包掃描
然后運(yùn)行
但是包括包掃描,開(kāi)啟命名空間,其實(shí)都需要在配置文件上添加配置,比較容易出現(xiàn)錯(cuò)誤。我們后面可以將配置文件也按照注解開(kāi)發(fā)。
component-scan
component:組件,Spring將管理的bean視作自己的一個(gè)組件scan:掃描
base-package指定Spring框架掃描的包路徑,它會(huì)掃描指定包及其子包中的所有類上的注解。包路徑越多[如:com.jgdabc.dao.impl],掃描的范圍越小速度越快
包路徑越少[如:com.jgdabc],掃描的范圍越大速度越慢
一般掃描到項(xiàng)目的組織名稱即Maven的groupId下[如:com.jgdabc]即可。
注意
@Component注解如果不起名稱,會(huì)有一個(gè)默認(rèn)值就是當(dāng)前類名首字母小寫(xiě),所以也可以按照名稱獲取
對(duì)于@Component注解,還衍生出了其他三個(gè)注解@Controller 、@Service 、@Repository
這幾個(gè)注解的功能是一樣的,只是設(shè)定這樣的名字便于我們區(qū)分具體功能。
方便我們后期在編寫(xiě)類的時(shí)候能很好地區(qū)分出這個(gè)類是屬于表現(xiàn)層、業(yè)務(wù)層還是數(shù)據(jù)層的類。
注解改造spring配置文件
首先將原來(lái)的配置文件刪掉。因?yàn)閷?shí)在太麻煩。或者你可以注銷掉。我們使用注解的方式。
這樣這個(gè)之前的配置文件就不會(huì)再起作用了。
然后我們創(chuàng)建一個(gè)config的目錄。下面創(chuàng)建配置類。
難道你創(chuàng)建一個(gè)配置類,spring就會(huì)認(rèn)為你這個(gè)類就是它的配置類?不會(huì)的。
我們用注解告訴他
上次我們用的是在xml配置掃描,現(xiàn)在我們用注解掃描bean。
現(xiàn)在我們運(yùn)行App測(cè)試類,照樣也可以運(yùn)行出來(lái)。這個(gè)就真的方便太多了。
總結(jié)以上的過(guò)程
注解掃描的話,可以掃描多級(jí)。需要這樣去寫(xiě),舉個(gè)例子
之前我們讀取配置方式改一下
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(); }}
起步就這么簡(jiǎn)單。
未完續(xù)更。