1. 程式人生 > >Spring bean注入方式

Spring bean注入方式

Spring bean提供了3中注入方式:屬性注入和構造方法注入

1、屬性注入:

1 <bean id="dept" class="com.proc.bean.Dept">
2     <property name="id" value="2"/>
3     <property name="name" value="資訊部"></property>
4 </bean>

  屬性注入方式,要求屬性提供呢setXxx方法。上面提供的是普通屬性注入,如果要注入物件屬性,可以這樣

1 <bean id="user" class
="com.proc.bean.User"> 2 <property name="id" value="1" /> 3 <property name="username" value="caoyc"></property> 4 <property name="dept" ref="dept"></property> 5 </bean>

  我們看到第三個屬性dept,是一個Dept型別的屬性,可以通過ref來引用一個已定義的Dept型別的dept物件。

1 ApplicationContext context=new
ClassPathXmlApplicationContext("applicationContext.xml"); 2 User user=context.getBean("user", User.class); 3 System.out.println(user.getUsername()); 4 System.out.println(user.getDept().getName());

  結果我們可以看到

caoyc
資訊部

  除了可以使用ref來引用外部物件外,我們也可以在user物件內部宣告一個Dept物件

複製程式碼
 1 <bean id="user" class="com.proc.bean.User"
> 2 <property name="id" value="1" /> 3 <property name="username" value="caoyc"></property> 4 <property name="dept"> 5 <bean class="com.proc.bean.Dept"> 6 <property name="id" value="2"/> 7 <property name="name" value="資訊部"></property> 8 </bean> 9 </property> 10 </bean>
複製程式碼

2、使用構造器注入

  假如,有一個User類

複製程式碼
package com.proc.bean;

public class User {
    
    private int id;
    private String username;
    private int age;
    private double slary;
    
    public User() {    
        
    }
    public User(int id, String username) {
        this.id = id;
        this.username = username;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", age=" + age
                + ", slary=" + slary + "]";
    }
}
複製程式碼
<bean id="user" class="com.proc.bean.User">
    <constructor-arg  value="1"/>
    <constructor-arg  value="caoyc"/>
</bean>

  這裡使用的是: public User(int id, String username)構造方式 

  這裡使用的是下標方式,這裡省略了index屬性。index屬性從0開始。上面的程式碼相當於

1 <bean id="user" class="com.proc.bean.User">
2     <constructor-arg index="0" value="1"/>
3     <constructor-arg index="1" value="caoyc"/>
4 </bean>

  假設有這樣的兩個構造方式

複製程式碼
 1 public User(int id, String username, int age) {
 2     this.id = id;
 3     this.username = username;
 4     this.age = age;
 5 }
 6 public User(int id, String username, double slary) {
 7     this.id = id;
 8     this.username = username;
 9     this.slary = slary;
10 }
複製程式碼

  配置bean

複製程式碼
 1 <bean id="user" class="com.proc.bean.User">
 2     <constructor-arg index="0" value="1" />
 3     <constructor-arg index="1" value="caoyc"/>
 4     <constructor-arg index="2" value="18"/>
 5 </bean>
 6 
 7 <bean id="user2" class="com.proc.bean.User">
 8     <constructor-arg index="0" value="1" />
 9     <constructor-arg index="1" value="caoyc"/>
10     <constructor-arg index="2" value="1800"/>
11 </bean>
複製程式碼

   測試程式碼

複製程式碼
1 ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
2 User user=context.getBean("user",User.class);
3 System.out.println(user);
4 
5 User user2=context.getBean("user2",User.class);
6 System.out.println(user2);
複製程式碼

  輸出結果

1 User [id=1, username=caoyc, age=0, slary=18.0]
2 User [id=1, username=caoyc, age=0, slary=1800.0]

   這裡都是呼叫的public User(int id, String username, double slary)這個建構函式。那麼怎麼呼叫public User(int id, String username, int age)這個建構函式呢?

   方法是,在這裡我們需要使用到type屬性,來指定引數的具體型別

1 <bean id="user" class="com.proc.bean.User">
2     <constructor-arg index="0" value="1" />
3     <constructor-arg index="1" value="caoyc"/>
4     <constructor-arg index="2" value="18" type="int"/>
5 </bean>

  輸出結果

1 User [id=1, username=caoyc, age=18, slary=0.0]
2 User [id=1, username=caoyc, age=0, slary=1800.0]

【其它說明】

  1、如果value屬性是基本屬性直接使用

  2、如果valeu屬性是其它型別,需要使用ref引用外部型別或使用內部定義方式

  3、如果value屬性中包含了xml特殊字元,需要使用CDATA來。例如:


            
           

相關推薦

Spring bean注入方式

Spring bean提供了3中注入方式:屬性注入和構造方法注入 1、屬性注入: 1 <bean id="dept" class="com.proc.bean.Dept"> 2 <property name="id" value="2"/&

Spring 學習一 bean 注入方式

Bean 的注入方式 介紹向 IOC 容器注入 bean 的方式 XML 配置的方式 public class Person { private String name; private Integer age; } xml 檔案的配置

Spring三種bean注入方式

(http://glzaction.iteye.com/blog/1299441) Spring中依賴注入有三種注入方式: 一、構造器注入; 二、設值注入(setter方式注入); 三、Feild方式注入(註解方式注入)。 一、構造器注入      構造器

spring-bean(註解方式-管理及依賴註入)

sca 支持 nbsp 開啟 const tex ng- autowire 作用 Bean管理(註解方式) 1、添加註解的依賴包:Spring-aop.jar 2、配置spring的XML文件的引入(查官方源碼) 3、開啟註解的掃描 <context:compon

Spring Bean注入/單例理解/迴圈依賴

理解迴圈依賴問題,首先明白spring有四種注入方式。 第一種,SET注入a類中持有b類的引用,並且a類有b的set方法。在bean中新增<property>標籤即可注入。實質上是將b例項化,然後呼叫set方法注入。 <bean id="a" class="com.qunar.poj

spring注入方式

注入簡介 Spring注入可以理解為是對一個物件進行初始化,也就是省去new的這個步驟,類似於工廠模式一樣,通過一個工廠製造出這個物件,如果遇到修改,只需要改一處就行了。實現spring注入一般有兩種方法,配置檔案,或者用註解。各有不同的作用。 注意:本文中涉及到所以

通過Spring Bean 注入static變數,來設計一套適合測試,開發,生產環境的配置項

(http://blog.csdn.net/initphp/article/details/8834844) 這邊文章的目的主要是為了在spring開發web專案的時候,讓我們的測試,開發,生產環境的配置項 .properties作為配置檔案。 我們首先需要建

spring bean 注入失敗的幾種原因

1.異常資訊 2.有可能引起的原因: 1.在applicationContext-service.xml的配置檔案裡的包掃描不對 2.在web.xml裡沒有載入spring容器 3.分散式工

Spring依賴注入方式,為什麼Spring4.0提倡使用建構函式注入方式

先回答題目中的問題: 基於建構函式或基於setter的DI? 何時使用構造注入,何時使用setter注入,經驗法則是:強制依賴用構造,可選依賴用Setter。注意,在settter方法上使用@Required註解即可令屬性強制依賴。  Spring 團隊建議,構造注入的例項是不

Spring Bean配置方式之三:註解配置

Spring提供通過掃描類路徑中的特殊註解類來自動註冊Bean定義。同註解驅動事務一樣需要開啟自動掃描並註冊Bean定義支援,使用方式如下(resources/chapter12/ componentDefinitionWithAnnotation.xml): jav

Java學習筆記38:通過Spring Bean 注入static變數,來設計一套適合測試,開發,生產環境的配置項

這邊文章的目的主要是為了在spring開發web專案的時候,讓我們的測試,開發,生產環境的配置項 .properties作為配置檔案。 我們首先需要建立一個config資料夾,然後建立開發,測試,生產環境的.properties配置項檔案。 例如,dev.proper

Spring Bean註冊方式小結

IOC容器 Spring的核心是一個IOC容器,管理著我們向容器註冊的所有bean。下面我們來看下兩種向容器註冊bean的方式, Reader BeanDefinitionReader的使用方式如下, import org.springfra

spring依賴注入方式及其優缺點

1 public class ExampleBean 2 { 3     private AnotherBean beanOne; 4     private YetAnotherBean beanTwo; 5     private int i; 6     public ExampleBean(Anoth

Spring注入方式--構造方法--解決需要在構造方法裡面去初始化全域性變數

構造方法注入 public class UserService implements IUserService { private IUserDao userDao; public UserService(IUserDao userDao) {

在ServletContextListener 的實現類中(使用Spring @Value 註解的方式讀取配置檔案、或者注入Spring bean

在ServletContextListener 的實現類中 使用Spring @Value 註解的方式讀取配置檔案 我想向ServletContextListener中通過Spring @value 的方法讀取 properties 配置檔案資訊,但是我開始的方法不行 public class MyLi

spring bean的三種注入方式

依賴注入:讓呼叫類對某一介面實現類的依賴關係由第三方注入,以移除呼叫類對某一介面實現類的依賴。 接下來將詳細的向大家介紹Spring容器支援的三種依賴注入的方式以及具體配置方法: • 屬性注入方法 • 建構函式注入方法 • 工廠方法注入方法 一

Spring Bean注入方式 & 在程式碼中獲取bean方式

Spring Bean的注入方式依賴注入是一個讓物件只通過構造引數,工廠方法的引數或者配置的屬性來定義他們的依賴的過程。依賴注入主要使用以下幾種方式:1. 基於建構函式的注入基於建構函式的依賴注入是由IoC容器來呼叫類的建構函式,建構函式的引數代表這個Bean所依賴的物件。在

Springbean注入初始化方式—通過註解@Configuration @bean

雖然 2.0 版本釋出以來,Spring 陸續提供了十多個註解,但是提供的這些註解只是為了在某些情況下簡化 XML 的配置,並非要取代 XML 配置方式。這一點可以從 Spring IoC 容器的初始化類可以看出:ApplicationContext 介面的最常用的實現類是

深入學習Spring框架之二構造器注入方式裝配Bean

    這一節我們來看看怎麼使用Spring建立我們的Bean物件。     容器是Spring的核心,Spring的容器有兩種型別:Bean工廠,由BeanFactory介面定義,是最簡單的容器;以及應用上下文,由ApplicationContext定義。Bean工廠對於

在Servlet中可訪問Spring bean物件,但是不能直接以注入方式引用

在Servlet中使用註解的方式引用Spring bean物件,會報空指標,因此可以在init()方法中通過WebApplicationContextUtils.getWebApplicationContext(serv