日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

spring的基本用法

發(fā)布時(shí)間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring的基本用法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

關(guān)于spring的幾種注入方式

理解類之間的關(guān)聯(lián)關(guān)系

一,set注入

在這之前我們得spring的jar包,可以去官網(wǎng)下,添加到WebContent下 WEB-INF 下 lib里

這種方式就得首先實(shí)現(xiàn)set方法,現(xiàn)在以英雄(Hero接口)和武器(weapon)為例講解

第一步,首先我們創(chuàng)建兩個(gè)接口

英雄接口

package com.inter;public interface Hero {void fight(); }

武器接口

package com.inter;public interface Weapon {void attack(); }

第二步,然后我們建立兩個(gè)實(shí)現(xiàn)類呂布(Lvbu)實(shí)現(xiàn)Hero接口,方天畫戟(FangTianHuaJi)實(shí)現(xiàn)Weapon

package com.test;import com.inter.Hero; import com.inter.Weapon;public class Lvbu implements Hero{Weapon weapon;public Weapon getWeapon() {return weapon;}//shipublic void setWeapon(Weapon weapon) {this.weapon = weapon;}@Overridepublic void fight() {System.out.println("呂布拿起武器");weapon.attack();}} package com.test;import com.inter.Weapon;public class FangTianHuaJi implements Weapon {@Overridepublic void attack() {// TODO Auto-generated method stubSystem.out.println("方天畫戟卡卡砍");}}

再來一個(gè)武器青龍偃月刀

package com.test;import com.inter.Weapon;public class Qing implements Weapon{@Overridepublic void attack() {// TODO Auto-generated method stubSystem.out.println("青龍偃月殺殺");}}

第三步,我們得創(chuàng)建一個(gè)配置文件spring.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/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="lvbu" class="com.test.Lvbu"><!-- set注入 --><property name="weapn" ref="fang"></property></bean><bean id="fang" class="com.test.FangTianHuaJi"></bean></beans>

第四步,建立一個(gè)測(cè)試main

package com.test;import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;import com.inter.Hero; import com.inter.Performer;public class Test {public static void main(String[] args) {// TODO Auto-generated method stub//獲取配置文件ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml");//得到英雄類Hero per=(Hero)context.getBean("lvbu");per.fight(); } }

結(jié)果

二,自動(dòng)裝配autowire

byName,當(dāng)我們的呂布有兩個(gè)屬性的時(shí)候,也就是說他有兩把武器的時(shí)候,我們還是這樣寫,就會(huì)報(bào)錯(cuò)。將FangTianHuaJi類的id去了一個(gè)和lvbu類的屬性weapon一樣的名字,并且在lvbu bean中添加了autowire="byName"用于指明裝配類型是byName自動(dòng)裝配。這個(gè)時(shí)候lvbu bean就是在上下文中找名為weapon的bean裝配到他自己的weapon屬性中。

byType,這里已經(jīng)不用關(guān)注FangTianHuaJi類對(duì)應(yīng)的bean的id是什么了,因?yàn)橐呀?jīng)定義lvbu bean的autowire屬性為"byType"。這個(gè)時(shí)候lvbu bean會(huì)在上下文中尋找和weapon具有相同類型的類對(duì)應(yīng)的bean。這里兩把刀是相同的屬性,所以還這樣寫就會(huì)報(bào)錯(cuò)

一種方法是將其中一個(gè)bean的primary屬性設(shè)為false,比如:將青龍偃月Qing bean的primary屬性設(shè)為true,那么呂布的武器就變成青龍偃月刀了

三,使用注解 @Autowired 自動(dòng)裝配

通過基于注解的方式,可以不用在xml文件中為guanyu bean添加autowire屬性了,但是注意加啟動(dòng)注解標(biāo)簽

spring.xml

<!-- 當(dāng)我們使用注解時(shí)需要啟動(dòng)注解 --><context:annotation-config /><bean id="lvbu" class="com.test.Lvbu" ></bean><bean id="weapon" class="com.test.FangTianHuaJi" ></bean>

還有要在呂布的武器屬性上加@Autowired,表明注解自動(dòng)注入

package com.test;import org.springframework.beans.factory.annotation.Autowired;import com.inter.Hero; import com.inter.Weapon;public class Lvbu implements Hero{//需要在屬性頭上添加注解@AutowiredWeapon weapon;public Weapon getWeapon() {return weapon;}//set注入,時(shí)必須寫public void setWeapon(Weapon weapon) {this.weapon = weapon;}@Overridepublic void fight() {System.out.println("呂布拿起武器");weapon.attack();} }

注意這里我們和上面一樣,我們有兩個(gè)同類型的武器時(shí),我們還是要做區(qū)分,添加@Qualifier注解

xml添加

<!-- 當(dāng)我們使用注解時(shí)需要啟動(dòng)注解 --><context:annotation-config /><bean id="lvbu" class="com.test.Lvbu" ></bean><bean id="fang" class="com.test.FangTianHuaJi" ><qualifier value="weaponoflvbu"></qualifier></bean><bean id="qing" class="com.test.Qing"></bean>

這里的呂布武器也要添加@Qualifier注解

package com.test;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier;import com.inter.Hero; import com.inter.Weapon;public class Lvbu implements Hero{//需要在屬性頭上添加注解@Autowired//要和配置的對(duì)應(yīng)@Qualifier("weaponoflvbu")Weapon weapon;public Weapon getWeapon() {return weapon;}//set注入,時(shí)必須寫public void setWeapon(Weapon weapon) {this.weapon = weapon;}@Overridepublic void fight() {System.out.println("呂布拿起武器");weapon.attack();}}

也可以更簡(jiǎn)單的寫,直接在@Qalifier();里加id

<!-- 當(dāng)我們使用注解時(shí)需要啟動(dòng)注解 --><context:annotation-config /><bean id="lvbu" class="com.test.Lvbu" ></bean><bean id="fang" class="com.test.FangTianHuaJi" ></bean><bean id="qing" class="com.test.Qing"></bean>

四,spring的自動(dòng)檢測(cè)

context:component-scan元素會(huì)掃描指定的包以及所有子包,并查找出能夠自動(dòng)注冊(cè)為Spring Bean的類。base-package屬性標(biāo)示了context:component-scan元素所掃描的包。

為自動(dòng)檢測(cè)標(biāo)注Bean

默認(rèn)情況下,context:component-scan查找使用構(gòu)造型(stereotype)注解所標(biāo)注的類,這些特殊的注解如下:

類型 說明
@component 通用的構(gòu)造型注解,標(biāo)示該類為Spring 組件。
@Controller 標(biāo)識(shí)將該類定義為Spring MVC controller。
@Repository 標(biāo)識(shí)將該類定義為數(shù)據(jù)倉(cāng)庫(kù)(例如:Dao層)。
@Service 標(biāo)識(shí)將該類定義為服務(wù)(例如:Service層)。

這里我們就是普通的寫,所以就使用@component ,其實(shí)這幾個(gè)注解都可以用,只是我們感覺其他的不合適

xml配置

<context:component-scan base-package="com.test"></context:component-scan> <bean id="lvbu" class="com.test.Lvbu" ></bean><!-- 用注解對(duì)應(yīng)了就不用寫bean了 --> package com.test;import org.springframework.stereotype.Component;import com.inter.Weapon;//屬于呂布的武器 @Component("weaponOflvbu") public class FangTianHuaJi implements Weapon {@Overridepublic void attack() {// TODO Auto-generated method stubSystem.out.println("方天畫戟卡卡砍");}} package com.test;import org.springframework.stereotype.Component;import com.inter.Weapon;//屬于關(guān)羽 的武器 @Component("weaponOfguanyu") public class Qing implements Weapon{@Overridepublic void attack() {// TODO Auto-generated method stubSystem.out.println("青龍偃月殺殺");}} package com.test;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier;import com.inter.Hero; import com.inter.Weapon;public class Lvbu implements Hero{//需要在屬性頭上添加注解@Autowired//要和配置的對(duì)應(yīng),如果一個(gè)接口只對(duì)應(yīng)一個(gè)實(shí)現(xiàn)類的話就都不用寫qualifier@Qualifier("weaponOflvbu")Weapon weapon;public Weapon getWeapon() {return weapon;}//set注入,時(shí)必須寫public void setWeapon(Weapon weapon) {this.weapon = weapon;}@Overridepublic void fight() {System.out.println("呂布拿起武器");weapon.attack();}}

如果一個(gè)接口只對(duì)應(yīng)一個(gè)實(shí)現(xiàn)類的話就都不用寫qualifier,一般別人寫項(xiàng)目的時(shí)候都是一個(gè)接口對(duì)應(yīng)一個(gè)實(shí)現(xiàn)類,所以一般都看不到qualifier

轉(zhuǎn)載于:https://www.cnblogs.com/liu-ya/p/9577774.html

總結(jié)

以上是生活随笔為你收集整理的spring的基本用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。