精品专区-精品自拍9-精品自拍三级乱伦-精品自拍视频-精品自拍视频曝光-精品自拍小视频

網站建設資訊

NEWS

網站建設資訊

詳解spring自動掃描包

配置文件

在永仁等地區,都構建了全面的區域性戰略布局,加強發展的系統性、市場前瞻性、產品創新能力,以專注、極致的服務理念,為客戶提供網站建設、成都做網站 網站設計制作按需網站策劃,公司網站建設,企業網站建設,品牌網站建設,全網整合營銷推廣,成都外貿網站制作,永仁網站建設費用合理。

前面的例子我們都是使用XML的bean定義來配置組件。在一個稍大的項目中,通常會有上百個組件,如果這些組件采用XML的bean定義來配置,顯然會增加配置文件的體積,查找及維護起來也不太方便。

Spring2.5為我們引入了組件自動掃描機制,它可以在類路徑底下尋找標注了@Component、@Service、@Controller、@Repository注解的類,并把這些類納入進Spring容器中管理。

它的作用和在XML文件中使用bean節點配置組件是一樣的。要使用自動掃描機制,我們需要打開以下配置信息:

<?xml version="1.0" encoding="UTF-8"?>

 

其中這個配置隱式注冊了多個對注解進行解析處理的處理器,包括該配置注冊的處理器,也就是說寫了配置,就不用寫配置了,此外base-package為需要掃描的包(含子包)。

注解

@Service用于標注業務層組件、 @Controller用于標注控制層組件(如Struts2中的action)、@Repository用于標注數據訪問組件,即DAO組件。而@Component泛指組件,當組件不好歸類的時候,我們可以使用這個注解進行標注。
本文是建立在@Autowire注解與自動裝配的案例基礎上的。

我們首先將Spring的配置文件改為:

<?xml version="1.0" encoding="UTF-8"?>

 

一個實例

然后使用@Service注解標注PersonServiceBean類,如下:

@Service
public class PersonServiceBean implements PersonService {
 private PersonDao personDao;
 public void setPersonDao(PersonDao personDao) {
  this.personDao = personDao;
 }
 @Override
 public void save() {
  personDao.add();
 }
}

使用@Repository注解標注PersonDaoBean類,如下:

@Repository
public class PersonDaoBean implements PersonDao {
 @Override
 public void add() {
  System.out.println("執行PersonDaoBean中的add()方法");
 }
}

最后,我們修改SpringTest類的代碼為:

public class SpringTest {
 @Test
 public void instanceSpring() {
  AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); 
  PersonService personService = (PersonService) ctx.getBean("personServiceBean");
  PersonDao personDao = (PersonDao) ctx.getBean("personDaoBean");
  System.out.println(personService);
  System.out.println(personDao);
  ctx.close();
 }
}

測試instanceSpring()方法,可看到Eclipse控制臺打印:

詳解spring自動掃描包

如果我們想使用按指定名稱獲取,可將PersonServiceBean類的代碼修改為:

@Service("personService")
public class PersonServiceBean implements PersonService {
 private PersonDao personDao;
 public void setPersonDao(PersonDao personDao) {
  this.personDao = personDao;
 }
 @Override
 public void save() {
  personDao.add();
 }
}

這樣,SpringTest類的代碼應改為:

public class SpringTest {
 @Test
 public void instanceSpring() {
  AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); 
  PersonService personService = (PersonService) ctx.getBean("personService");
  System.out.println(personService);
  ctx.close();
 }
}

測試instanceSpring()方法,可看到Eclipse控制臺打印:

詳解spring自動掃描包

我們前面學過Spring管理的bean的作用域,我們就能知道以上Spring管理的兩個bean的作用域默認是singleton。當然了,我們也可以更改Spring管理的bean的作用域,如將PersonServiceBean類的代碼改為:

@Service("personService") @Scope("prototype")
public class PersonServiceBean implements PersonService {
 private PersonDao personDao;
 public void setPersonDao(PersonDao personDao) {
  this.personDao = personDao;
 }
 @Override
 public void save() {
  personDao.add();
 }
}

意味著Spring管理的PersonServiceBean這個bean的作用域變成prototype了,這時我們將SpringTest類的代碼修改為:

public class SpringTest {
 @Test
 public void instanceSpring() {
  AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); 
  PersonService personService1 = (PersonService) ctx.getBean("personService");
  PersonService personService2 = (PersonService) ctx.getBean("personService");
  System.out.println(personService1 == personService2);
  ctx.close();
 }
}

測試instanceSpring()方法,可看到Eclipse控制臺打印:

詳解spring自動掃描包

prototype作用域本來就意味著每次從Spring容器獲取bean都是新的對象嘛。

若是通過在classpath路徑下自動掃描方這種式把組件納入Spring容器中管理,如何指定bean的初始化方法和銷毀方法呢?這時我們就需要用到兩個注解:@PostConstruct和@PreDestroy。為了試驗,我們將PersonServiceBean類的代碼修改為:

@Service("personService")
public class PersonServiceBean implements PersonService {
 private PersonDao personDao;
 @PostConstruct
 public void init() {
  System.out.println("初始化資源");
 }
 @PreDestroy
 public void destroy() {
  System.out.println("銷毀、關閉資源");
 }
 public void setPersonDao(PersonDao personDao) {
  this.personDao = personDao;
 }
 @Override
 public void save() {
  personDao.add();
 }
}

接下來還要將SpringTest類的代碼修改為:

public class SpringTest {
 @Test
 public void instanceSpring() {
  AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); 
  PersonService personService = (PersonService) ctx.getBean("personService");
  ctx.close();
 }
}

這樣,測試instanceSpring()方法,Eclipse控制臺會打印:

詳解spring自動掃描包

如要查看源碼,可點擊讓Spring自動掃描和管理Bean進行下載。

總結

以上所述是小編給大家介紹的spring自動掃描包,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對創新互聯網站的支持!


網站欄目:詳解spring自動掃描包
文章分享:http://m.jcarcd.cn/article/jhhjcp.html
主站蜘蛛池模板: 国产成年人免费在 | 成人精品视频17c | 国产激情中文在线 | www.黄在线播放 | 国产亚洲美女精品 | 国产对白在线观 | 成人国产欧美 | 九九在线精品视频 | 欧美性色欧 | 69国产品国| 国语视频二区 | 国产中文在线不卡 | 中文字幕精品一区 | 91视频福利精品 | 无码精品毛片成人影院 | 另类癖好 | 中文字幕乱码免费不 | 国产超薄肉丝袜在线 | 国产黄免费 | 国产精品高清视亚洲 | 精品国产免费第一区 | 欧美日韩视频免 | 精品福利在线视频 | 国产一区精品 | 国产原创91 | 日韩在线观看一区二 | 乱码一二 | 另类癖好| 97韩剧| 精品国产一 | 日韩国产精品区 | 国产91色在线| 区二区视频免费看 | 日韩v片| 韩日精品一区二区 | 国产精品免费视 | 日韩成人3D动漫 | 国产区在线观看 | 国产精品福利小视频 | 国色天香天天影院综 | 久热久热不卡 |