欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于spring同名bean覆蓋問題的解決

 更新時(shí)間:2021年09月22日 11:04:25   作者:ado1986  
這篇文章主要介紹了spring同名bean覆蓋問題的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

spring同名bean覆蓋問題

默認(rèn)情況下,spring在處理同一個(gè)ApplicationContext中名稱相同的bean時(shí)

分為兩種情況處理

1、如果兩個(gè)bean是在同一個(gè)配置文件中,那么spring會報(bào)錯(cuò)。

2、如果兩個(gè)bean是在不同的配置文件中,默認(rèn)情況下,spring會覆蓋先前的bean。

在配置文件很多時(shí),如果在啟動時(shí),對于同名的bean加載沒有異常信息,出現(xiàn)問題后會比較難以定位。

在spring中,處理容器的元數(shù)據(jù)信息時(shí),默認(rèn)使用DefaultListableBeanFactory類,該類中有個(gè)屬性:allowBeanDefinitionOverriding,默認(rèn)情況下為true,即允許重名的bean可以被覆蓋。

還好,spring有辦法對改屬性賦值。

重寫ContextLoaderListener,對于web應(yīng)用,容器類型為XmlWebApplicationContext,在該類中設(shè)置allowBeanDefinitionOverriding為false,然后在spring啟動時(shí),碰到同名bean就會拋出異常。

案例如下

public class TradeContextLoaderListener extends ContextLoaderListener {
 @Override
 protected void customizeContext(ServletContext servletContext,
   ConfigurableWebApplicationContext applicationContext) {
  super.customizeContext(servletContext, applicationContext);
  XmlWebApplicationContext context = (XmlWebApplicationContext) applicationContext;
  context.setAllowBeanDefinitionOverriding(false);
 }
}

配置web.xml:

 <listener>
  <description>spring監(jiān)聽器</description>
  <listener-class>com.***.trade.system.web.util.TradeContextLoaderListener</listener-class>
 </listener>

spring 子類覆蓋父類中注入的bean

我們在設(shè)計(jì)程序框架的時(shí)候,會設(shè)計(jì)一個(gè)抽象基類,子類繼承這個(gè)基類,共有的方法放到基類中去,使用spring后使代碼變的很簡單,現(xiàn)在遇到的問題是在基類中注入bean后,子類不可能都會是有這個(gè)bean,那么需要考慮到子類需要覆蓋或者說重新注入個(gè)性化的bean

有三種方法來實(shí)現(xiàn)這個(gè)效果,以下是一種方法,如下面代碼:

抽象基類

public abstract class AbstractNameService
{
 public abstract String getname();
}

兩個(gè)實(shí)現(xiàn)類:

@Service("firstNameService")
public class FirstNameService extends AbstractNameService
{ 
 @Override
 public String getname()
 {
  return "FirstName";
 } 
}
@Service("nameService")
public class NameService extends AbstractNameService
{ 
 @Override
 public String getname()
 {
  return "Name";
 } 
}

另外一個(gè)抽象基類

public abstract class AbstractService
{
 protected AbstractNameService nameService; 
 public String getName()
 {
  return nameService.getname();
 } 
 public AbstractNameService getService()
 {
  return nameService;
 } 
 <span style="color:#ff9966;">@Resource(name = "nameService")</span>
 public void setService(AbstractNameService nameService)
 {
  this.nameService = nameService;
 } 
}

實(shí)現(xiàn)類:

@Service("getNameService")
public class GetNameService extends AbstractService
{ 
 <span style="color:#ff9900;">@Resource(name = "firstNameService")</span>
 @Override
 public void setService(AbstractNameService nameService)
 {
  this.nameService = nameService;
 } 
}

controller

@Controller
public class UnionpayQuickPayDSMVC
{
 @Resource
 private AbstractService getNameService; 
 @RequestMapping(value = "/*", method = RequestMethod.GET)
 public void execute(HttpServletRequest request, HttpServletResponse response)
 {
  try
  {
   response.getWriter().write(getNameService.getName());
  }
  catch (IOException e)
  {
   System.out.println(e);
  }
 }
}

在applicationContext.xml和springmvc的配置文件只需要添加一個(gè)包<context:component-scan/>標(biāo)簽就行了

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java如何使用Lombok更優(yōu)雅地編碼

    java如何使用Lombok更優(yōu)雅地編碼

    Lombok能通過注解的方式,在編譯時(shí)自動為屬性生成構(gòu)造器、getter/setter、equals、hashcode、toString方法。這樣就省去了手動重建這些代碼的麻煩,使代碼看起來更簡潔些。下面我們來詳細(xì)學(xué)習(xí)下吧
    2019-06-06
  • InputStreamReader和BufferedReader用法及實(shí)例講解

    InputStreamReader和BufferedReader用法及實(shí)例講解

    這篇文章主要介紹了InputStreamReader和BufferedReader用法及實(shí)例講解的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • Mybatis框架及原理實(shí)例分析

    Mybatis框架及原理實(shí)例分析

    這篇文章主要介紹了Mybatis框架及原理實(shí)例分析,需要的朋友可以參考下
    2017-08-08
  • JAVA冒泡排序和二分查找的實(shí)現(xiàn)

    JAVA冒泡排序和二分查找的實(shí)現(xiàn)

    本文詳細(xì)介紹了JAVA冒泡排序和二分查找的實(shí)現(xiàn),雖然這兩種算法比較簡單,但是確實(shí)我們必須需要掌握的。下面來看看。
    2016-07-07
  • java中最易犯錯(cuò)的特殊字符示例詳解

    java中最易犯錯(cuò)的特殊字符示例詳解

    這篇文章主要給大家介紹了關(guān)于java中最易犯錯(cuò)的特殊字符的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Java 和 Javascript 的 Date 與 .Net 的 DateTime 之間的相互轉(zhuǎn)換

    Java 和 Javascript 的 Date 與 .Net 的 DateTime 之間的相互轉(zhuǎn)換

    這篇文章主要介紹了Java 和 Javascript 的 Date 與 .Net 的 DateTime 之間的相互轉(zhuǎn)換的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • maven創(chuàng)建spark項(xiàng)目的pom.xml文件配置demo

    maven創(chuàng)建spark項(xiàng)目的pom.xml文件配置demo

    這篇文章主要為大家介紹了maven創(chuàng)建spark項(xiàng)目的pom.xml文件配置demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Java超詳細(xì)講解三大特性之一的封裝

    Java超詳細(xì)講解三大特性之一的封裝

    封裝是一個(gè)非常廣泛的概念,小到一個(gè)屬性的封裝,大到一個(gè)框架或者一個(gè)項(xiàng)目的封裝,下面這篇文章主要給大家介紹了關(guān)于java中封裝的那點(diǎn)事,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 最新評論