<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    溫故知新:spring_03基于annotation配置IOC

    相比較使用XML配置,基于annotation的IOC配置會(huì)極大的簡(jiǎn)化配置文件的內(nèi)容,所以在beans.xml中無(wú)需再配置bean的設(shè)置,只需要開啟組件掃描即可。
     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"
     4     xmlns:context="http://www.springframework.org/schema/context"
     5     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     6                         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     7                         http://www.springframework.org/schema/context
     8                         http://www.springframework.org/schema/context/spring-context-3.0.xsd">
     9 
    10     <!-- 開啟注解 -->
    11     <context:annotation-config/>
    12     <!-- 指定哪些需要加入掃描 -->
    13     <context:component-scan base-package="org.duyt.*"/>
    14 
    15 </beans>
    拿出一個(gè)Dao組件的注入為例
    1 package org.duyt.dao;
    2 public interface IUserDao {
    3     public void add();
    4     public void delete();
    5     public void update();
    6     public void load();
    7 }
    Dao的實(shí)現(xiàn)
     1 package org.duyt.dao.impl;
     2 
     3 import org.duyt.dao.IUserDao;
     4 import org.springframework.context.annotation.Scope;
     5 import org.springframework.stereotype.Repository;
     6 
     7 //使用Repository("userDao")標(biāo)注UserDao類相當(dāng)于在配置文件中寫作
     8 //<bean id="userDao" class="org.duyt.dao.impl.UserDao"/>
     9 @Repository("userDao")
    10 //相應(yīng)的,Scope("singleton")標(biāo)注就相當(dāng)于的配置scope="singleton"
    11 @Scope("singleton")
    12 public class UserDao implements IUserDao {
    13     public void add() {
    14         System.out.println("用戶增加方法");
    15     }
    16     public void delete() {
    17         System.out.println("用戶刪除方法");
    18     }
    19     public void update() {
    20         System.out.println("用戶更新方法");
    21     }
    22     public void load() {
    23         System.out.println("用戶查詢方法");
    24     }
    25 }
    26 
    spring提供了三種注解來(lái)對(duì)應(yīng)MVC的三層,數(shù)據(jù)層的注解對(duì)應(yīng)Repository,業(yè)務(wù)層對(duì)應(yīng)service,表示層對(duì)應(yīng)controller。還有一個(gè)公共的component,分開這么多是為了更好的標(biāo)注當(dāng)前這個(gè)待注入類的功能,如果不按照這些分類好的注解去注入也可以完成注入,但是還是規(guī)范的去寫。關(guān)于對(duì)象中某個(gè)屬性的注入看下面的action
     1 package org.duyt.action;
     2 
     3 import javax.annotation.Resource;
     4 
     5 import org.duyt.domain.User;
     6 import org.duyt.service.IUserService;
     7 import org.springframework.context.annotation.Scope;
     8 import org.springframework.stereotype.Controller;
     9 
    10 @Controller("userAction")
    11 @Scope("prototype")
    12 public class UserAction {
    13     @Resource
    14     private IUserService userService;
    15     public String testString;
    16     public User user;
    17     
    18     public UserAction() {
    19     }
    20     
    21     public UserAction(String testString) {
    22         super();
    23         this.testString = testString;
    24     }
    25 
    26     public void addUser(){
    27         userService.add();
    28     }
    29     //get/set略
    30 }
    31 
    對(duì)于某個(gè)要注入的屬性,Spring自帶的注解是@AutoWire,但是這種是按照類型注入的,為了避免接口多實(shí)現(xiàn)可能出現(xiàn)的問(wèn)題,推薦可以使用javax.annotation提供的@resource,這種是按照屬性的名稱進(jìn)行注入,可以直接在屬性名之上添加注解,這樣的話連屬性的get/set都可以省了...或者是添加對(duì)應(yīng)的get/set,在set方法上添加注解。但是要注意的是,按照屬性名字進(jìn)行注入,屬性的名稱需要和注解定義組件時(shí)的id一致。Action中的Iuserservice的實(shí)例名為userService,會(huì)尋找有@service("userService")的注解進(jìn)行注入,否則會(huì)注入失敗。
    測(cè)試如下
     1 package org.duyt.test;
     2 import org.duyt.action.UserAction;
     3 import org.junit.Test;
     4 import org.springframework.beans.factory.BeanFactory;
     5 import org.springframework.context.support.ClassPathXmlApplicationContext;
     6 public class IocTest {
     7     private BeanFactory factory = new ClassPathXmlApplicationContext("beans.xml");
     8     @Test
     9     public void test(){
    10         
    11         //測(cè)試依賴注入
    12         UserAction ua = (UserAction) factory.getBean("userAction");
    13         UserAction ua2 = (UserAction) factory.getBean("userAction");
    14         System.out.println(ua == ua2);
    15         ua.addUser();
    16     }
    17 }
    18 
    結(jié)果為:
    false
    用戶增加方法

    posted on 2014-11-04 11:17 都較瘦 閱讀(94) 評(píng)論(0)  編輯  收藏 所屬分類: containerFramework

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    博客定位:囿于目前的水平,博客定位在記錄自己的學(xué)習(xí)心得和隨手的練習(xí)

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲国产电影av在线网址| 边摸边吃奶边做爽免费视频99| 中文字幕a∨在线乱码免费看| 免费观看黄网站在线播放| 国产精品亚洲AV三区| 亚洲国产精品嫩草影院在线观看 | 免费大片黄在线观看yw| 国产亚洲福利精品一区二区| 亚洲人成影院在线| 午夜无遮挡羞羞漫画免费| 最近的2019免费中文字幕| 国产精品亚洲mnbav网站| 搜日本一区二区三区免费高清视频| 久久亚洲国产午夜精品理论片| 最近免费中文字幕4| 成人亚洲国产va天堂| 久久久久一级精品亚洲国产成人综合AV区 | 伊人免费在线观看| 国产精品亚洲自在线播放页码| 久久国产高潮流白浆免费观看| 亚洲视频在线免费观看| 成人永久免费高清| 黄网站色视频免费看无下截 | 阿v免费在线观看| 亚洲精品美女久久久久| 亚洲中文字幕在线第六区| 成人激情免费视频| 日韩精品无码专区免费播放| 亚洲视频手机在线| 亚洲综合色区在线观看| 好大好深好猛好爽视频免费| 97青青草原国产免费观看| a在线视频免费观看在线视频三区| 亚洲娇小性xxxx色| 亚洲高清视频在线播放| 国产AV无码专区亚洲AVJULIA| 免费一级做a爰片性色毛片| 黄瓜视频高清在线看免费下载| 久久久久久AV无码免费网站下载| 亚洲成AV人片久久| 国产高清在线精品免费软件|