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

使用Spring由構(gòu)造方法自動裝配

 更新時間:2021年08月09日 14:40:57   作者:Remember_Ray  
這篇文章主要介紹了使用Spring由構(gòu)造方法自動裝配,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Spring由構(gòu)造方法自動裝配

在Spring中,可以使用“通過構(gòu)造自動裝配”,實際上是按構(gòu)造函數(shù)的參數(shù) 類型自動裝配。 這意味著,如果一個bean的數(shù)據(jù)類型與其他bean的構(gòu)造器參數(shù)的數(shù)據(jù)類型是相同的,那么將自動裝配。

下面看看Spring構(gòu)造函數(shù)自動裝配的一個完整例子。

1. Beans

這里有兩個 beans, 分別是:developer 和 language

public class Developer { 
 private Language language; 
 public Language getLanguage() {
  return language;
 }
 
 public void setLanguage(Language language) {
  this.language = language;
 }
 
 @Override
 public String toString() {
  return "Developer [language=" + language + "]";
 } 
}
public class Language { 
 private String name; 
 public String getName() {
  return name;
 }
 
 public void setName(String name) {
  this.name = name;
 }
 
 @Override
 public String toString() {
  return "Language [name=" + name + "]";
 } 
}

2. Spring裝配

通常情況下,你可以通過構(gòu)造這樣自動裝配 Bean:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 
 <bean id="developer" class="com.ray.common.Developer">
  <constructor-arg>
   <ref bean="language"/>
  </constructor-arg>
 </bean>
 
 <bean id="language" class="com.ray.common.Language">
  <property name="name" value="Java"/>
 </bean>
</beans>

輸出

Developer [language=Language [name=Java]]

隨著自動裝配用構(gòu)造函數(shù)啟用后,你可以不設(shè)置構(gòu)造器屬性。Spring會找到兼容的數(shù)據(jù)類型,并自動裝配它。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 
 <bean id="developer" class="com.ray.common.Developer" autowire="constructor" />
  
 <bean id="language" class="com.ray.common.Language">
  <property name="name" value="Java"/>
 </bean>
</beans>

輸出

Developer [language=Language [name=Java]]

spring的五種自動裝配方式

當(dāng)Spring裝配Bean屬性時,有時候非常明確,就是需要將某個Bean的引用裝配給指定屬性。

先寫兩個類

public class UserServcie { 
    private UserDao userDao; 
    public UserServcie(UserDao userDao){}
    public void setUserDao(UserDao userDao){
        this.userDao = userDao;
    }
    public UserDao getUserDao(){
        return userDao;
    }
} 
public class UserDao {
}

例如:在UserServcie中注入UserDao需要顯式的手動裝配

<bean id="userDao" class="com.beans.UserDao"></bean>
<bean id="userService" class="com.beans.UserServcie">
   <property name="userDao" ref="userDao"></property>
</bean>

這種寫法會是開發(fā)效率變慢。

因此出現(xiàn)了spring的自動裝配方式:五種自動裝配方式 no、byName、byType、constructor、default。

1、no

當(dāng)使用autowire="no"時,不使用自動裝配,依然需要手動裝配,需要顯式指定某個bean的引用。

<bean id="userService" class="com.beans.UserServcie" autowire="no">
     <property name="userDao" ref="userDao"></property>
</bean>

2、byName

使用autowire="byName"裝配方式時,就是使用名字裝配,不需要顯式指定某個bean的引用,此時使用的是setter方式注入。此時要注意需要被注入的bean的id和注入的bean的屬性名之間的匹配,否則失敗注入不成功。

例如:UserService中需要注入UserDao, private UserDao userDao,當(dāng)byName注入時,spring會在ioc容器中尋找id="userDao"的對象,找到注入成功,找不到注入失敗。

public class UserServcie { 
    private UserDao userDao; 
    public UserServcie(UserDao userDao){}
    public void setUserDao(UserDao userDao){
        this.userDao = userDao;
    }
    public UserDao getUserDao(){
        return userDao;
    }
}

此時的配置文件為

<bean id="userDao" class="com.beans.UserDao"></bean>
<bean id="userService" class="com.beans.UserServcie" autowire="byName"></bean>

3、byType

使用autowire="byType"裝配方式時,就是使用類型裝配,不需要顯式指定某個bean的引用,此時使用的是setter方式注入。此時需要注意ioc容器中不允許出現(xiàn)同一個類型的兩個及以上個數(shù)量的實例,否則失敗報異常。

此時的配置文件為

<bean id="userDao" class="com.beans.UserDao"></bean>
<bean id="userService" class="com.beans.UserServcie" autowire="byType"></bean>

4、constructor

使用autowire="constructor "裝配方式時,默認(rèn)也是使用byType方式裝配,只是不同的是按照構(gòu)造器參數(shù)的類型進行裝配,構(gòu)造器方式注入。

<bean id="userDao" class="com.beans.UserDao"></bean>
<bean id="userService" class="com.beans.UserServcie" autowire="constructor"></bean>

5、default

使用autowire="default"裝配方式時,是使用父級標(biāo)簽的默認(rèn)裝配方式,我們這里也就是指<bean/>的父級標(biāo)簽<beans>的默認(rèn)裝配方式進行裝配。例如:

<beans default-autowire="byType" 
       xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 
    <bean id="userDao" class="com.beans.UserDao"></bean>
    <bean id="userService1" class="com.beans.UserServcie" autowire="default"></bean> 
    <bean id="userService2" class="com.beans.UserServcie" autowire="byName"></bean>
</beans>

這里beans標(biāo)簽使用的是byType方式,對于userService1 使用的autowire="default",就會使用beans的byType方式裝配,而 userService1的autowire="byName"則會使用byName裝配。

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

相關(guān)文章

  • SpringMVC如何在生產(chǎn)環(huán)境禁用Swagger的方法

    SpringMVC如何在生產(chǎn)環(huán)境禁用Swagger的方法

    本篇文章主要介紹了SpringMVC如何在生產(chǎn)環(huán)境禁用Swagger的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • 解決springboot項目啟動失敗Could not initialize class com.fasterxml.jackson.databind.ObjectMapper問題

    解決springboot項目啟動失敗Could not initialize class&

    這篇文章主要介紹了解決springboot項目啟動失敗Could not initialize class com.fasterxml.jackson.databind.ObjectMapper問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Java選擇排序法以及實例詳解

    Java選擇排序法以及實例詳解

    在本篇文章里小編給大家整理了一篇關(guān)于Java選擇排序法以及實例內(nèi)容,并做了詳細(xì)分析,有興趣的朋友們可以跟著學(xué)習(xí)下。
    2022-11-11
  • SpringBoot使用PropertiesLauncher加載外部jar包

    SpringBoot使用PropertiesLauncher加載外部jar包

    這篇文章主要介紹了SpringBoot使用PropertiesLauncher加載外部jar包,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • 原理分析SonarQube中IdentityProvider賬戶互斥現(xiàn)象

    原理分析SonarQube中IdentityProvider賬戶互斥現(xiàn)象

    這篇文章主要為大家介紹分析SonarQube中IdentityProvider賬戶互斥現(xiàn)象原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-02-02
  • 解決idea中servlet報紅問題

    解決idea中servlet報紅問題

    這篇文章主要介紹了解決idea中servlet報紅問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 使用Java代碼實現(xiàn)RocketMQ的生產(chǎn)與消費消息

    使用Java代碼實現(xiàn)RocketMQ的生產(chǎn)與消費消息

    這篇文章介紹一下其他的小組件以及使用Java代碼實現(xiàn)生產(chǎn)者對消息的生成,消費者消費消息等知識點,并通過代碼示例介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-07-07
  • JMeter自定義日志與日志分析的實現(xiàn)

    JMeter自定義日志與日志分析的實現(xiàn)

    JMeter與Java程序一樣,會記錄事件日志,本文就介紹一下JMeter自定義日志與日志分析的實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • java如何獲取map中value的最大值

    java如何獲取map中value的最大值

    這篇文章主要介紹了java如何獲取map中value的最大值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Java設(shè)計模式之策略模式深入刨析

    Java設(shè)計模式之策略模式深入刨析

    策略模式屬于Java 23種設(shè)計模式中行為模式之一,該模式定義了一系列算法,并將每個算法封裝起來,使它們可以相互替換,且算法的變化不會影響使用算法的客戶。本文將通過示例詳細(xì)講解這一模式,需要的可以參考一下
    2022-05-05

最新評論