新聞中心
@Autowired 的作用是什么?
@Autowired 是一個注釋,它可以對類成員變量、方法及構造函數進行標注,讓 spring 完成 bean 自動裝配的工作。
@Autowired 默認是按照類去匹配,配合 @Qualifier 指定按照名稱去裝配 bean。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import blog.service.ArticleService;
import blog.service.TagService;
import blog.service.TypeService;@Controller
br/>@Controller
//成員屬性字段使用 @Autowired,無需字段的 set 方法@Autowired
br/>@Autowired
//set 方法使用 @Autowired
private ArticleService articleService;@Autowired
br/>@Autowired
this.articleService = articleService;
}
//構造方法使用 @Autowired
private TagService tagService;@Autowired
br/>@Autowired
this.tagService = tagService; }
}
?@Autowired的用法
br/>}
}
?@Autowired的用法
????
??????????
這樣你在userService里面要做一個userDao的setter/getter方法。
但如果你用了@Autowired的話,你只需要在UserService的實現類中聲明即可。
br/>????
這樣你在userService里面要做一個userDao的setter/getter方法。
但如果你用了@Autowired的話,你只需要在UserService的實現類中聲明即可。
private IUserDao userdao;Spring@Autowired注解與自動裝配
br/>Spring@Autowired注解與自動裝配
我們編寫spring?框架的代碼時候。一直遵循是這樣一個規(guī)則:所有在spring中注入的bean?都建議定義成私有的域變量。并且要配套寫上?get?和?set方法。
Boss?擁有?Office?和?Car?類型的兩個屬性:??
清單?3. Boss.java
package com.baobaotao;????
public class Boss {????
????private Car car;????
????private Office office;????????//?省略?get/setter?????
????@Override???
br/>????//?省略?get/setter?????
????@Override???
????????return "car:" + car + "/n" + "office:" + office;????
????}????
}????
??System.out.println必須實現toString方法
我們在?Spring?容器中將?Office?和?Car?聲明為?Bean,并注入到?Boss Bean?中:下面是使用傳統(tǒng)?XML?完成這個工作的配置文件?beans.xml:??
清單?4. beans.xml?將以上三個類配置成?Bean???
????
????xsi:schemaLocation="http://www.springframework.org/schema/beans?????
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">????
????
????????
????????
????
????
????????
????
????
????????
????????
????
????
當我們運行以下代碼時,控制臺將正確打出?boss?的信息:??
清單?5.?測試類:AnnoIoCTest.java??
import org.springframework.context.ApplicationContext;????
import org.springframework.context.support.ClassPathXmlApplicationContext;????
public class AnnoIoCTest {????
????public static void main(String[] args) {????
????????String[] locations = {"beans.xml"};????
????????ApplicationContext ctx =?????
????????????new ClassPathXmlApplicationContext(locations);????
????????Boss boss = (Boss) ctx.getBean("boss");????????????System.out.println(boss);????
????}????
}????
這說明?Spring?容器已經正確完成了?Bean?創(chuàng)建和裝配的工作。??
?2???@Autowired
br/>????????System.out.println(boss);????
????}????
}????
這說明?Spring?容器已經正確完成了?Bean?創(chuàng)建和裝配的工作。??
?2???@Autowired
要實現我們要精簡程序的目的。需要這樣來處理:
?在applicationContext.xml中加入:
??????
Spring?通過一個BeanPostProcessor?對?@Autowired?進行解析,所以要讓?@Autowired?起作用必須事先在Spring?容器中聲明?AutowiredAnnotationBeanPostProcessor Bean。??
?修改在原來注入spirng容器中的bean的方法。?????在域變量上加上標簽@Autowired,并且去掉?相應的get?和set方法
br/>?????在域變量上加上標簽@Autowired,并且去掉?相應的get?和set方法
package com.baobaotao;????
import org.springframework.beans.factory.annotation.Autowired;????
public class Boss {????????@Autowired???
br/>????@Autowired???
br/>????@Autowired???
????…????
}?????
*?在applicatonContext.xml中?把原來?引用的
????
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">????
????????
br/>????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-2.5.xsd">????
????????
????
?????????
????
????
????????
????
????
????????
????????
???
?這樣,當?Spring?容器啟動時,AutowiredAnnotationBeanPostProcessor?將掃描?Spring?容器中所有?Bean,當發(fā)現?Bean?中擁有?@Autowired?注釋時就找到和其匹配(默認按類型匹配)的?Bean,并注入到對應的地方中去。??
br/>????????
???
?這樣,當?Spring?容器啟動時,AutowiredAnnotationBeanPostProcessor?將掃描?Spring?容器中所有?Bean,當發(fā)現?Bean?中擁有?@Autowired?注釋時就找到和其匹配(默認按類型匹配)的?Bean,并注入到對應的地方中去。??
當然,您也可以通過?@Autowired?對方法或構造函數進行標注,如果構造函數有兩個入參,分別是?bean1?和bean2,@Autowired?將分別尋找和它們類型匹配的?Bean,將它們作為?CountryService (Bean1 bean1 ,Bean2 bean2)?的入參來創(chuàng)建CountryService Bean。來看下面的代碼:??對方法
package com.baobaotao;????
public class Boss {????
????private Car car;????
????private Office office;?????????@Autowired????
br/>?????@Autowired????
????????this.car = car;????????}????
????@Autowired???
br/>????}????
????@Autowired???
????????this.office = office;????????}????
????…????
}????
這時,@Autowired?將查找被標注的方法的入參類型的?Bean,并調用方法自動注入這些?Bean。而下面的使用方法則對構造函數進行標注:??
br/>????}????
????…????
}????
這時,@Autowired?將查找被標注的方法的入參類型的?Bean,并調用方法自動注入這些?Bean。而下面的使用方法則對構造函數進行標注:??
public class Boss {????
????private Car car;????
????private Office office;????????@Autowired???
br/>????@Autowired???
????????this.car = car;????
????????this.office = office ;????
????}????
????…????
}????
由于?Boss()?構造函數有兩個入參,分別是?car?和?office,@Autowired?將分別尋找和它們類型匹配的?Bean,將它們作為?Boss(Car car ,Office office)?的入參來創(chuàng)建?Boss Bean。
另外有需要云服務器可以了解下創(chuàng)新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
分享題目:@Autowired的作用和用法是什么?-創(chuàng)新互聯
文章地址:http://ef60e0e.cn/article/hejoo.html