正常狀況下咱們在xml配置bean,可是咱們爲了減小xml配置,能夠在類上使用一些特定註解向Spring容器代表這是一個須要註冊的bean。經常使用的註解有@Configure、@Component、@Reposity、@Service、@Controller。java
傳統的在xml中裝配bean的方式
<bean id="baishi" class="com.yqg.springannotation.BaiShi"></bean>
<bean id="kekou" class="com.yqg.springannotation.KeKou"></bean> <bean id="work" class="com.yqg.springannotation.Work"></bean>
使用包掃描,基於註解註冊bean的方式,包含子包,註冊的bean名稱爲類名首字母小寫,如Student類,註冊的名稱爲student
<context:component-scan base-package="com.yqg.springannotation"></context:component-scan>
2、使用註解注入依賴的beanspring
咱們使用@Autowried、@resource這兩個註解將bean注入,使用註解的好處是不用在配置文件中使用ref注入bean,不用在須要注入bean的類中使用get和set,代碼簡潔。可是有些類好比整合第三方類,咱們不得不使用xml配置bean。app
代碼示例測試
xml部分配置ui
<?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="baishi" class="com.yqg.springannotation.BaiShi"></bean> <bean id="kekou" class="com.yqg.springannotation.KeKou"></bean> <bean id="work" class="com.yqg.springannotation.Work"></bean> </beans>
一個接口以及兩個實現類spa
package com.yqg.springannotation; /** * @author yqg * @date 2019-02-15 21:31 */ public interface Drink { /** * 測試Spring註解 */ public void say(); }
package com.yqg.springannotation; /** * @author yqg * @date 2019-02-15 21:32 */ public class BaiShi implements Drink{ public void say() { System.out.println("百事可樂"); } }
package com.yqg.springannotation; /** * @author yqg * @date 2019-02-15 21:33 */ public class KeKou implements Drink{ public void say() { System.out.println("可口可樂"); } }
使用註解注入依賴的類Workcode
package com.yqg.springannotation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import javax.annotation.Resource; /** * @author yqg * @date 2019-02-15 21:44 */ public class Work { public void work(){ baiShi.say(); keKou.say(); } // public void work(){ // drink.say(); // } @Autowired(required = false) /** * 百事可樂 */ private BaiShi baiShi; @Resource(name = "kekou") private KeKou keKou; // @Autowired // @Qualifier(value = "baishi") // private Drink drink; }
測試類component
package com.yqg.springannotation; import com.yqg.util.ApplicationContextUtil; import org.junit.Test; import org.springframework.context.ApplicationContext; /** * @author yqg * @date 2019-02-15 21:38 */ public class AnnotationTest { @Test public void test(){ ApplicationContext applicationContext = ApplicationContextUtil.getApplicationContext(); Work work = applicationContext.getBean("work",Work.class); work.work(); } }
@Resource和@AutoWried二者做用同樣,可是二者也有差異xml
1.@Resource默認按照byName註冊bean,若是沒有就按類型,能夠@Resource(name="")指定bean的名稱,@Autowired默認按類型注入blog
2.@Resource是javaEE的註解,@Autowried是spring的註解,儘可能使用@Resource,減小第三方代碼耦合
@qualifier註解是解決是實現類不肯定問題,好比一個接口多個實現類,咱們將該接口注入,那麼spring容器不能肯定使用哪一個實現類,咱們可使用@qualifier和@Autowried結合使用。