程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> spring:按照Bean的名稱自動裝配User,springbean

spring:按照Bean的名稱自動裝配User,springbean

編輯:JAVA綜合教程

spring:按照Bean的名稱自動裝配User,springbean


本實例將介紹如何按照Bean 的名稱自動裝配 User 對象!

<bean> 元素的 autowire 屬性負責自動裝配 <bean> 標簽,定義 JavaBean 的屬性。這樣做可以省去很多配置 JavaBean 屬性的標簽代碼,使代碼更整潔、美觀;

但是也有負面影響:使用自動裝配之後,無法從配置文件中讀懂 JavaBean 需要什麼屬性。

1.編寫User 對象,代碼如下:

package com.importnew;

public class User {
    private String name="test";
    private String sex="男";
    private int age=29;
    private String tel="123456789";

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getTel() {
        return tel;
    }
    public void setTel(String tel) {
        this.tel = tel;
    }
    @Override
    public String toString() {
        return "User [name=" + name + ", sex=" + sex + ", age=" + age
                + ", tel=" + tel + "]";
    }
    
}

 

2.定義 Bean (TestUtil),將 User 對象注入到 TestUtil 對象中。代碼如下:

package com.importnew;
  public class TestUtil {    private User user;    public User getUser() {    return user;    }    public void setUser(User user) {    this.user = user;    } }

 

3.在 Spring 的配置文件 applicationContext.xml 中設置 Bean 的自動裝配,Spring 將根據 Bean 中的屬性名稱自動將 User 對象注入到指定的 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" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">
   
     <bean id="user" class="com.importnew.User" />
     
     <bean autowire="byName" id="testUtil" class="com.importnew.TestUtil"  />
     
</beans>

 

4.編寫測試類 TestSpring ,代碼如下:

package test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.importnew.TestUtil;
import com.importnew.User;

public class TestSpring {

    public static void main(String[] args) {     
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        TestUtil testUtil = (TestUtil) context.getBean("testUtil");
        User user = testUtil.getUser();
        System.out.println(user.getAge());
        System.out.println(user.getName());
    }
}

 

———————————————————————————————————————————————————

備注:

1.按 Bean 名稱自動裝配存在的問題。

按照 Bean 名稱自動裝配存在錯誤裝配 JavaBean 的可能,如果配置文件中定義了與需要自動裝配的 JavaBean 的名稱相同而類型不同的 JavaBean ,則會錯誤的注入不同類型的 JavaBean。

2.若將配置文件中的 autowire=“byName” 改成 "byType" ,則可以實現按照 Bean 的類型自動裝配 User 。實際配置文件中的代碼如下:

  <bean autowire="byType"  id="testUtil" class="com.importnew.TestUtil"  />

3.關於 byName 與 byType 兩者之間的區別:

  byName 通過 Bean 的名稱自動裝配。如果一個 Bean 的 name  和另外一個 Bean 的 name 相同,就自動裝配。
  byType 通過 Bean 的屬性類型自動自動裝配。如果一個 Bean 的屬性類型和另一個 Bean 的屬性類型兼容,就自動裝配。
4.無論是按照 Bean 的類型,還是按照 Bean 的名稱,自動裝配有時候都會出現無法自動裝配的情況。例如在配置文件中再添加一個 User 類的實現對象,byType 自動裝配類型會因為無法自動識別裝配那一個JavaBean 而拋出 org.springframework.beans.factory.UnsatisfiedDependencyException 異常。要解決此類問題,只能通過混合使用手動裝配來指定裝配哪個 JavaBean 。

////end

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved