您好,登錄后才能下訂單哦!
@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的用法
<bean id="userDao" class="..."/>
<bean id="userService" class="...">
????<property name="userDao">
??????<ref bean="userDao"/>????</property>
</bean>
這樣你在userService里面要做一個userDao的setter/getter方法。
但如果你用了@Autowired的話,你只需要在UserService的實現類中聲明即可。
br/>????</property>
</bean>
這樣你在userService里面要做一個userDao的setter/getter方法。
但如果你用了@Autowired的話,你只需要在UserService的實現類中聲明即可。
private IUserDao userdao;Spring@Autowired注解與自動裝配
br/>Spring@Autowired注解與自動裝配
我們編寫spring?框架的代碼時候。一直遵循是這樣一個規則:所有在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?中:下面是使用傳統?XML?完成這個工作的配置文件?beans.xml:??
清單?4. beans.xml?將以上三個類配置成?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-2.5.xsd">????
????<bean id="boss" class="com.baobaotao.Boss">????
????????<property name="car" ref="car"/>????
????????<property name="office" ref="office" />????
????</bean>????
????<bean id="office" class="com.baobaotao.Office">????
????????<property name="officeNo" value="002"/>????
????</bean>????
????<bean id="car" class="com.baobaotao.Car" scope="singleton">????
????????<property name="brand" value="?紅旗?CA72"/>????
????????<property name="price" value="2000"/>????
????</bean>????
</beans>????
當我們運行以下代碼時,控制臺將正確打出?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?創建和裝配的工作。??
?2???@Autowired
br/>????????System.out.println(boss);????
????}????
}????
這說明?Spring?容器已經正確完成了?Bean?創建和裝配的工作。??
?2???@Autowired
要實現我們要精簡程序的目的。需要這樣來處理:
?在applicationContext.xml中加入:
<!--?該?BeanPostProcessor?將自動對標注@Autowired?的?Bean?進行注入?-->??????<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>?
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中?把原來?引用的<porpery >標簽也去掉。
<?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-2.5.xsd">????
????<!--?該?BeanPostProcessor?將自動起作用,對標注?@Autowired?的?Bean?進行自動注入?-->????
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">????
????<!--?該?BeanPostProcessor?將自動起作用,對標注?@Autowired?的?Bean?進行自動注入?-->????
????????AutowiredAnnotationBeanPostProcessor"/>????
????<!--?移除?boss Bean?的屬性注入配置的信息?-->?????
????<bean id="boss" class="com.baobaotao.Boss"/>????
????<bean id="office" class="com.baobaotao.Office">????
????????<property name="officeNo" value="001"/>????
????</bean>????
????<bean id="car" class="com.baobaotao.Car" scope="singleton">????
????????<property name="brand" value="?紅旗CA72"/>????
????????<property name="price" value="2000"/>????????</bean>????
</beans>???
?這樣,當?Spring?容器啟動時,AutowiredAnnotationBeanPostProcessor?將掃描?Spring?容器中所有?Bean,當發現?Bean?中擁有?@Autowired?注釋時就找到和其匹配(默認按類型匹配)的?Bean,并注入到對應的地方中去。??
br/>????</bean>????
</beans>???
?這樣,當?Spring?容器啟動時,AutowiredAnnotationBeanPostProcessor?將掃描?Spring?容器中所有?Bean,當發現?Bean?中擁有?@Autowired?注釋時就找到和其匹配(默認按類型匹配)的?Bean,并注入到對應的地方中去。??
當然,您也可以通過?@Autowired?對方法或構造函數進行標注,如果構造函數有兩個入參,分別是?bean1?和bean2,@Autowired?將分別尋找和它們類型匹配的?Bean,將它們作為?CountryService (Bean1 bean1 ,Bean2 bean2)?的入參來創建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)?的入參來創建?Boss Bean。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。