Spring 講解(五)

Spring 中使用 xml 配置開發(fā)和使用注解開發(fā)案例

1掌敬、Spring 中使用 xml 配置開發(fā)案例

接口

public interface UserDao {

    void add(User user);
}
========================================================================================
public interface UserService {

    void add(User user);
}

接口的實(shí)現(xiàn)類

public class UserDaoImpl implements UserDao {

    @Override
    public void add(User user) {
        System.out.println("Dao 添加用戶信息======>" + user);
    }
}
=========================================================================================
public class UserServiceImpl implements UserService {

    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void add(User user) {
        System.out.println("Service 添加用戶信息======>" + user);
        userDao.add(user);
    }
}
=========================================================================================

模擬UserAction調(diào)用方法
public class UserAction {

    private UserService userService;

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public void save(User user) {
        System.out.println("UserAction 方法調(diào)用");
        userService.add(user);
    }
}

配置bean.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 1.配置dao-->
    <bean id="userDao" class="com.example.demo.code.impl.UserDaoImpl"></bean>

    <!-- 2.配置service -->
    <bean id="userService" class="com.example.demo.code.impl.UserServiceImpl">
        <property name="userDao" ref="userDao"></property>
    </bean>

    <!--3.配置action-->
    <bean id="userAction" class="com.example.demo.code.UserAction">
        <property name="userService" ref="userService"></property>
    </bean>
</beans>

測試函數(shù)

public class ServiceTest {

    public static void main(String[] args) {

        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

        UserAction userAction = context.getBean(UserAction.class);

        User user = new User();
        user.setUsername("玉皇大帝");
        user.setPassword("888");
        user.setAge(9999);

        userAction.save(user);
    }
}

結(jié)果如下所示:

UserAction 方法調(diào)用汞窗。

Service 添加用戶信息======>User{username='玉皇大帝', password='888', age=9999}点把。

Dao 添加用戶信息======>User{username='玉皇大帝', password='888', age=9999}

可以看出是一層一層調(diào)用到 :action -> service -> dao

2羡玛、Spring 中使用注解開發(fā)案例

接口不變。修改接口的實(shí)現(xiàn)類

@Repository
public class UserDaoImpl implements UserDao {

    @Override
    public void add(User user) {
        System.out.println("Dao 添加用戶信息======>" + user);
    }
}
=========================================================================================
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    @Override
    public void add(User user) {
        System.out.println("Service 添加用戶信息======>" + user);
        userDao.add(user);
    }
}
=========================================================================================
@Controller
public class UserAction {

    @Autowired
    private UserService userService;

    public void save(User user) {
        System.out.println("UserAction 方法調(diào)用");
        userService.add(user);
    }
}

執(zhí)行上面的測試函數(shù)即可在控制臺(tái)打印和第一個(gè)案例一樣的信息账阻。

3符相、@Qualifier("id") & @Resource(name="id") 注解含義

如果在 UserServiceImpl 類上將注解修改為 @Service("myUserService")。如果需要注入指定 id 的類需要同時(shí)加上注解:@Autowired褒链、@Qualifier("myUserService")唁情。

@Autowired 是按照類型注入。

如果是接口甫匹,從容器中查找接口的實(shí)現(xiàn)類注入甸鸟;如果是類,就在容器中查找類進(jìn)行注入兵迅。

@Qualifier("id名稱")是按照指定id注入抢韭。

@Resource(name="id") = @Autowired+@Qualifier("id") 。

4恍箭、@Scope("prototype") 和 @Scope("singleton")

@Scope("singleton")

修改測試代碼刻恭,再次執(zhí)行

public class ServiceTest {

    public static void main(String[] args) {

        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

        UserAction userAction = context.getBean(UserAction.class);

        UserAction userAction2 = context.getBean(UserAction.class);

        System.out.println(userAction);
        System.out.println(userAction2);

    }
}

控制臺(tái)信息如下:

com.example.demo.code.UserAction@7098b907

com.example.demo.code.UserAction@7098b907

說明 Spring 注入默認(rèn)是單例。

@Scope("prototype")

在 UserAction 加上注解 @Scope("prototype") 扯夭,再次執(zhí)行測試函數(shù)鳍贾。

控制臺(tái)信息如下:

com.example.demo.code.UserAction@7098b907

com.example.demo.code.UserAction@503f91c3

說明 Spring 注入可以配置多例。

重點(diǎn):Spring 中默認(rèn)注入是單例的交洗。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贾漏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子藕筋,更是在濱河造成了極大的恐慌纵散,老刑警劉巖梳码,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異伍掀,居然都是意外死亡掰茶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門蜜笤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來濒蒋,“玉大人,你說我怎么就攤上這事把兔』铮” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵县好,是天一觀的道長围橡。 經(jīng)常有香客問我,道長缕贡,這世上最難降的妖魔是什么翁授? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮晾咪,結(jié)果婚禮上收擦,老公的妹妹穿的比我還像新娘。我一直安慰自己谍倦,他們只是感情好塞赂,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著昼蛀,像睡著了一般宴猾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上曹洽,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天鳍置,我揣著相機(jī)與錄音辽剧,去河邊找鬼送淆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛怕轿,可吹牛的內(nèi)容都是我干的偷崩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼撞羽,長吁一口氣:“原來是場噩夢啊……” “哼阐斜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起诀紊,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤谒出,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笤喳,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡为居,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了杀狡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒙畴。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖呜象,靈堂內(nèi)的尸體忽然破棺而出膳凝,到底是詐尸還是另有隱情,我是刑警寧澤恭陡,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布蹬音,位于F島的核電站,受9級(jí)特大地震影響子姜,放射性物質(zhì)發(fā)生泄漏祟绊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一哥捕、第九天 我趴在偏房一處隱蔽的房頂上張望牧抽。 院中可真熱鬧,春花似錦遥赚、人聲如沸扬舒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽讲坎。三九已至,卻和暖如春愧薛,著一層夾襖步出監(jiān)牢的瞬間晨炕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國打工毫炉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瓮栗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓瞄勾,卻偏偏與公主長得像费奸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子进陡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容