Spring Bean自動裝配和註解注入

來源:互聯網
上載者:User
問題描述

如果一個Bean需要注入很多屬性,每個屬性都要顯示注入,就會顯得很麻煩。 解決方案

讓Ioc容器自動為Bean指定引用。 方法之一---在XML設定檔實現自動裝配

Car.java

package com.zzj.bean;public class Car {public void start(){System.out.println("starting car...");}}

User.java

package com.zzj.bean;public class User {private Car car;public void setCar(Car car) {this.car = car;}public void startCar(){car.start();}}
設定檔

<?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="car" class="com.zzj.bean.Car"></bean>       <bean id="user" class="com.zzj.bean.User" autowire="byName"></bean></beans>
測試
public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");User user = (User) context.getBean("user");user.startCar();}

註:要讓spring容器自動裝配Bean,需要提供一個參考,這個參考就是bean的autowire屬性。

自動裝配有3中方式:

1.根據名稱自動裝配(byName)。因為spring 容器中Bean的名稱是唯一的,所以不會產生歧義,推薦使用這種方式。

2.根據類型自動裝配(byType)。在Spring容器中可能會找到多個跟需要注入的bean的類型相同的Bean,所以會產生歧義,Spring容器不知道注入哪個Bean,這時會拋出異常。

3.根據構造器自動裝配(constructor)。這種方式比較複雜,不做分析。 方法之二---使用註解實現自動裝配

修改User.java檔案和XML設定檔就行了。

User.java

package com.zzj.bean;import org.springframework.beans.factory.annotation.Autowired;public class User {@Autowiredprivate Car car;public void startCar(){car.start();}}
註:此時setter方法可以省掉。


XML設定檔

<?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"       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">                  <bean id="car" class="com.zzj.bean.Car"></bean>       <bean id="user" class="com.zzj.bean.User"></bean>       <context:annotation-config/></beans>
要使用Spring Ioc的註解注入功能,需要引入新的命名空間。
註:@Autowired是spring內建的註解,也可以使用Java原生的註解:@Resource。推薦使用@Resource,更具移植性。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.