Springmvc注解注入的簡單demo


今天看了注解注入覺得確實簡化了xml配置,一般情況下Spring容器要成功啟動的三大要件分別是:Bean定義信息,Bean實現類,以及spring本身。如果采取基於XML的配置,Bean信息和Bean實現類本身是分離的,而采用注解基於注解配置的方式,Bean定義信息通過在Bean實現類上標注注解實現,這種方式確實簡化了xml配置,但是是不是某種程度增加了耦合?

常用的注解有Autowired、Resource、Qualifier、Service、Controller、Repository、Component,其中作用如下:

Autowired是自動注入,自動從spring的上下文找到合適的bean來注入,主要用來消除setter和getter方法

Resource用來指定名稱注入

Qualifier和Autowired配合使用,指定bean的名稱

Service,Controller,Repository分別標記類是Service層類,Controller層類,數據存儲層的類,spring掃描注解配置時,會標記這些類要生成bean。

Component是一種泛指,標記類是組件,spring掃描注解配置時,會標記這些類要生成bean。

 上面的Autowired和Resource是用來修飾字段,構造函數,或者設置方法,並做注入的。而Service,Controller,Repository,Component則是用來修飾類,標記這些類要生成bean。
 
  • 基於注解的方式
首先定義一個風箏的Dao,代碼很簡單
 1 package com.xsf.springtest;
 2 
 3 import org.springframework.stereotype.Repository;
 4 
 5 
 6 @Repository
 7 public class kiteDao {
 8     
 9     private String driverType = "天空";
10     
11     public kiteDao(String palce) {
12         this.driverType = place;
13     }
14     
15     public kiteDao() {
16         
17     }
18 
19     public void flyKite(String kite) {
20         String insertMsg = String.format("把風箏  %s 放到了 %s", kite, driverType);
21         System.out.println(insertMsg);
22     }
23     
24 }

下面使用常用的Autowired將剛才定義的Bean注解到addkite中去,該類為service類,因此該類標注@Service注解

 1 package com.xsf.springtest;
 2 
 3 import javax.annotation.Resource;
 4 
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.beans.factory.annotation.Qualifier;
 7 import org.springframework.stereotype.Service;
 8 
 9 @Service
10 public class kiteService {
11     
12     @Autowired
13     //將前面定義的kiteDao類的實例就會自動注入到kitedao的實例中了
14     private kiteDao kitedao;
15     
16     public void addkite(String kite) {
17         this.kitedao.flyKite(kite);
18     }
19 }

最后一個寫一個測試代碼,運行下面的測試代碼即可看到信息

 

 1 package com.xsf.springtest;
 2 
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 5 import org.springframework.context.support.ClassPathXmlApplicationContext;
 6 
 7 
 8 public class flyKiteTest 
 9 {
10     public static void main( String[] args )
11     {
12         //它的構造函數接受一個package的名稱,來限定要掃描的package。然后就可以通過appContext的getBean方法獲得的實例了
13         ApplicationContext appContext = new AnnotationConfigApplicationContext("com.xsf.springtest");
14         
15 ;
16         kiteService service = appContext.getBean(kiteService.class);
17         service.addkite("大蝴蝶");
18     }
19 }
  •  注解與xml混合的方式

在source文件夾下面新建spring.xml文件這里的bean id為kitedao與kiteService中的一致若不一致會報錯(或者在@Autowired 后加上  @Qualifier("###")將kiteService中的kitedao換做對應的###即可)

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
 4     xsi:schemaLocation="http://www.springframework.org/schema/beans
 5  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
 6  http://www.springframework.org/schema/context
 7  http://www.springframework.org/schema/context/spring-context-3.0.xsd ">
 8 
 9     <context:annotation-config />
10     <!-- 掃描包 -->
11     <context:component-scan base-package="com.xsf.springtest">
12     </context:component-scan>
13 
14     <!-- 定義一個id為kitedao的Bean 他的構造函數palce的值為sqlite -->
15     <bean id="kitedao" class="com.xsf.springtest.kiteDao">
16         <constructor-arg name="place" value="樹上" />
17     </bean>
18 </beans>
19  

 

此時測試代碼中使用ApplicationContext appContext = new ClassPathXmlApplicationContext("/spring.xml");連接配置文件即可

 1 package com.xsf.springtest;
 2 
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 5 import org.springframework.context.support.ClassPathXmlApplicationContext;
 6 
 7 
 8 public class flyKiteTest 
 9 {
10     public static void main( String[] args )
11     {
12         //它的構造函數接受一個package的名稱,來限定要掃描的package。然后就可以通過appContext的getBean方法獲得的實例了
13        //ApplicationContext appContext = new AnnotationConfigApplicationContext("com.xsf.springtest");
14         //通過spring配置文件加載類
15         ApplicationContext appContext = new ClassPathXmlApplicationContext("/spring.xml");
16         kiteService service = appContext.getBean(kiteService.class);
17         service.addkite("大蝴蝶");
18     }
19 }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM