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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

【SSM框架系列】Spring IoC(控制反转) DI(依赖注入)注解开发

發(fā)布時(shí)間:2025/5/22 javascript 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【SSM框架系列】Spring IoC(控制反转) DI(依赖注入)注解开发 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Spring注解開發(fā)

Spring是輕代碼重配置的框架,配置比較繁重,會(huì)影響開發(fā)效率。這個(gè)時(shí)候可以通過注解開發(fā),注解代替xml配置文件可以簡(jiǎn)化配置,提高開發(fā)效率。

Spring原始注解

注解分為原始注解和新注解,主要是從邏輯上分的,并沒有實(shí)際的影響。
原始注解出現(xiàn)的比較早,主要用來替代標(biāo)簽配置的。

注解說明
@Component使用在類上,用于實(shí)例化Bean,相當(dāng)于標(biāo)簽
@Controller使用在web層類上,用于實(shí)例化Bean。語義化的@Component
@Service使用在service層類上,用于實(shí)例化Bean。語義化的@Component
@Repository使用在dao層類上,用于實(shí)例化Bean。語義化的@Component
@Autowired使用在對(duì)象引用字段上,用于根據(jù)當(dāng)前字段類型依賴注入
@Qualifier使用在對(duì)象引用字段上,結(jié)合@Autowired一起使用,用于根據(jù)名稱進(jìn)行依賴注入
@Resource使用在對(duì)象引用字段上,相當(dāng)于@Autowired+@Qualifier,按照名稱進(jìn)行依賴注入
@Value使用在普通類型字段上,注入普通屬性
@Scope使用在類上,標(biāo)準(zhǔn)Bean的作用范圍
@PostConstruct使用在方法上,標(biāo)注該方法是Bean的初始化方法
@PreDestory使用在方法上,標(biāo)注該方法時(shí)Bean的銷毀方法

上述注解中比較常用的是除最后兩個(gè)之外的所有注解。

注意

使用注解進(jìn)行開發(fā)時(shí),不需要在applicationContext.xml配置各種Bean了,但是需要配置組件掃描。作用是指定哪個(gè)包及其子包下的Bean需要進(jìn)行掃描,以便識(shí)別使用了注解配置的類、字段和方法。

<!--注解的組件掃描--> <context:component-scan base-package="cs.wy"/>

Spring注解開發(fā) - QuicStart

  • 在 ApplicationContext.xml中中引入context命名空間和約束文件,并添加組件掃描

  • 編寫UserDaoImpl類,并使用@Component(或者@Repository)進(jìn)行標(biāo)注,告訴Spring容器實(shí)例化該類。

//該接口因?yàn)椴粫?huì)被配置進(jìn)xml文檔,所以不需要添加注解public interface UserDao{public void save();}//@Component("userDao") 其中userDao相當(dāng)于Bean標(biāo)簽的id值@Repository("userDao") // 作用于dao層類上,用于實(shí)例化Bean。語義化的 @Component public class UserDaoImpl implements UserDao {@Overridepublic void save() {System.out.println("save running... ...");}}
  • 使用@Compont 或 @Service 標(biāo)識(shí)UserServiceImpl需要Spring進(jìn)行實(shí)例化
  • 使用@Autowired 或者 @Autowired+@Qulifier 或者 @Resource 進(jìn)行userDao的注入
//@Component("userService")@Service("userService") // 使用在service層類上,用于實(shí)例化Bean。語義化的 @Componentpublic class UserServiceImpl implements UserService {/*@Autowired 使用在對(duì)象引用字段上,用于根據(jù)當(dāng)前字段類型依賴注入 * @Qualifier("userDao") 使用在對(duì)象引用字段上,結(jié)合@Autowired一起使用,用于根據(jù)名稱進(jìn)行依賴注入* 其中,value相當(dāng)于Bean標(biāo)簽property子標(biāo)簽中ref的值* */ @Resource(name="userDao") // 使用在對(duì)象引用字段上,相當(dāng)于@Autowired+@Qualifier,按照名稱進(jìn)行依賴注入private UserDao userDao;@Overridepublic void save() {userDao.save();}}

用于創(chuàng)建對(duì)象的注解:他們的作用都是一樣的,如在xml配置文件中,編寫一個(gè)< bean >標(biāo)簽實(shí)現(xiàn)的功能一樣的

  • Component:當(dāng)不知道該類屬于軟件分層的哪一層時(shí),使用該注解,實(shí)例化Bean
    + 作用:用于把當(dāng)前類對(duì)象存入Spring容器中
    * 屬性:value:用于指定bean的id,不寫,默認(rèn)是當(dāng)前類名,首字母小寫
  • Controller 使用在web層類上
  • Service 使用在Service層上
  • Repository 使用在Dao層上
  • 上述三個(gè)注解作用和屬性與 Component 是一模一樣的,是Spring框架提供明確的三層使用注解,使三層架構(gòu)更加清晰

用于注入對(duì)象的注解:作用和xml配置文件中的bean標(biāo)簽中寫一個(gè)property標(biāo)簽作用一樣的

  • Autowired :
    * 作用:自動(dòng)按照類型注入,按照被標(biāo)注的成員變量的數(shù)據(jù)類型在Spring容器中進(jìn)行匹配,如果找到一樣的,就把對(duì)應(yīng)的對(duì)象賦值給被標(biāo)注的成員變量。但如果在Spring容器中存在符合要求的多個(gè)bean,這個(gè)時(shí)候會(huì)無法識(shí)別使用哪個(gè)bean。
    * 出現(xiàn)位置:可以是變量上,也可以是方法上
    * 細(xì)節(jié):使用注解注入時(shí),set方法可以不寫
  • Qualifier:
    * 作用:在按照類中注入的基礎(chǔ)上,在按照名稱注入,他給類成員注入是不能單獨(dú)使用,需和@Autowired一起使用,但是在給方法參數(shù)注入時(shí)可以
    * 屬性:value:用于指定注入bean的id值
  • Resource(name=“Bean的名稱”)
    * 作用:name為id的值。直接按照Bean的id注入,可以獨(dú)立使用
    * 屬性:name:用于指定bean的id值
    • 以上上個(gè)注入都只能注入其他Bean類型的數(shù)據(jù),而基本類型和String類型無法使用上述注解實(shí)現(xiàn),另外,集合類型的注入只能通過xml配置來實(shí)現(xiàn)
  • Value(“value”):
    * 作用:用于注入基本類型和String類型的數(shù)據(jù)
    * 屬性:value:用于指定數(shù)據(jù)的值,他可以使用Spring中的SpEL(也就是Spring的el表達(dá)式)
    * SpEL的寫法:${表達(dá)式}
    * KaTeX parse error: Expected 'EOF', got '#' at position 20: …來取外部文件的值 * #?{}是用來取Bean的屬性值,…{jdbc.driver}") 在Spring配置文件中導(dǎo)入Properties文件后,可以通過key(jdbc.driver)獲得value值

用于改變作用范圍的注解:作用和bean標(biāo)簽中使用scope屬性功能一樣

  • Scope:
    * 作用:指定bean的作用范圍
    * 屬性:value:指定范圍的取值,value的常用取值有prototype和singleton

和生命周期相關(guān)注解

  • @PostConstruct 被標(biāo)注的成員方法,將成為對(duì)象的初始化方法
  • @PreDestroy 被標(biāo)注的成員方法,將成為對(duì)象的銷毀方法

Spring常用新注解

使用原始注解不能替代Spring配置文件中全部?jī)?nèi)容,新注解可以替代如下配置:
1)非自定義的Bean的配置:例如DataSource
2)加載Properties文件的配置:<context:property-placeholder path=“classpath:xxx”/>
3)Spring注解組件掃描器配置:<context:component-scan base-package=""/>
4)引入其他xml配置文件:

針對(duì)以上4中情況,Spring提供新注解如下:Spring新注解的替代思想:使用一個(gè)類(核心配置類)替代xml核心配置文件,在類上使用注解代替原來xml文件中的標(biāo)簽。

注解說明
@Configuration標(biāo)注在特殊的指定類上,被標(biāo)注的類就是Spring核心配置類
@ComponentScan(“包名”)標(biāo)注在特殊的指定類上,指定組件掃描范圍,效果等同于<context:component-scan base-package=“包名”/>
@Bean(“value”)標(biāo)注在特殊指定類中的方法上,用于”標(biāo)注“非自定的Bean,標(biāo)注方式 有些特殊:Spring會(huì)將被標(biāo)注方法的返回值存儲(chǔ)在Spring容器中。效果等同于<bean id=“dataSource” class=“com.mchange.v2.c3p0.ComboPooledDataSource”">
@PropertySource標(biāo)注在特殊指定的類上或者其@import類上,將指定的properties文件加載進(jìn)Spring容器。寫法為@PropertySource(“classpath:xxx.properties”)。效果等同于<context:property-placeholder path=“calsspath:xxx”/>
@import標(biāo)注在特殊指定的類上,作用:將拆分出去的配置類引入到核心配置類內(nèi),寫法為:@import({xxx.class, yyy.class})。 效果上等同于

全注解代碼如下:

1)創(chuàng)建Spring核心配置類SpringConfiguration.java,并添加對(duì)應(yīng)注解

//被該注釋標(biāo)注后表示該類為Spring核心配置類@Configuration//指定組件掃描范圍,相當(dāng)于<context:component-scan base-package="包名"/>@ComponentScan("cs.wy")//引入拆分出去的配置類,相當(dāng)于<import resource="xxx.xml"/>@Import(DataSourceConfiguration.class)public class SpringConfiguration{}

2)新建jdbc.properties文件,將數(shù)據(jù)源連接基本參數(shù)配置其中:

jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/mavenuser=rootpassword=135246

3)創(chuàng)建Spring核心配置類拆分出去的數(shù)據(jù)源配置類DataSourceConfiguration.java,并添加相應(yīng)注解

//將Properties文件加載進(jìn)Spring容器,//相當(dāng)于<context:property-placeholder path="calsspath:xxx"/>@PropertySource("classpath:jdbc.properties")public class DataSourceConfiguration{@Value("${jdbc.driver}")private String driver;@Value("${jdbc.url}")private String url;@Value("${user}")private String username;@Value("${password}")private String password;@Bean("dataSource")public DataSource getDataSource() throws Exception {//創(chuàng)建數(shù)據(jù)源ComboPooledDataSource dataSource = new ComboPooledDataSource();//為數(shù)據(jù)源設(shè)置連接基本參數(shù)dataSource.setDriverClass(driver);dataSource.setJdbcUrl(url);dataSource.setUser(username);dataSource.setPassword(password);//返回創(chuàng)建好的數(shù)據(jù)源return dataSource;}}

常用新注解詳解

Configuration

  • 作用:指定當(dāng)前類是一個(gè)配置類
  • 細(xì)節(jié):
    • 當(dāng)配置類作為AnnotationConfigApplicationContext對(duì)象創(chuàng)建參數(shù)時(shí),該注解可以不寫
    • @Configuration這個(gè)注解什么時(shí)候必須寫,什么時(shí)候可以省略
    • 如果在AnnotationConfigApplicationContext(xxx.class)中指定了該配置文件的字節(jié)碼對(duì)象,就可以省略不寫
    • 沒有指定,就要在主配置文件中要寫,掃描子配置類,那么子配置類也必須要寫
    • 也可以通過@Import(JdbcConfig.class)來指定子配置類,如果使用也可以省略@Configuration

ComponentScan

  • 作用:用于通過注解指定Spring在創(chuàng)建容器的時(shí)候要掃描的包
  • 屬性:value:它和basePackages的作用一樣的效果等同于<context:component-scan base-package=“包名”/> |

Bean

  • 作用:用于把當(dāng)前方法的返回值作為bean對(duì)象存入Spring的容器中
  • 屬性:name用于指定bean的id值,當(dāng)不寫時(shí),默認(rèn)當(dāng)前方法的名稱
  • 細(xì)節(jié):當(dāng)使用注解配置的時(shí)候,如果方法有參數(shù),Spring框架會(huì)去容器查找有沒有可用的bean對(duì)象,查詢方式和Autowired注解的作用一樣的
    • 先按照類型去找,沒有就報(bào)錯(cuò)
    • 如果有且只有一個(gè),就自動(dòng)注入
    • 如果有多個(gè),會(huì)按照形參名稱去匹配,匹配成功則自動(dòng)注入
    • 匹配不是還是會(huì)報(bào)錯(cuò)
    • 可用使用Qualifier去指定要注入的bean的id

Import

  • 作用:導(dǎo)入其他的配置類
  • 屬性:value:指定其他配置類的字節(jié)碼,使用這個(gè)注解,有Import的注解類就是父類,導(dǎo)入的都是子類

PropertySource

  • 作用:用于指定properties文件的位置
  • 屬性:value:指定文件的路徑和名稱。
    * 關(guān)鍵字:classpath,表示類路徑下
    * 在Spring中如果要讀取配置文件,一般都要加classpath:關(guān)鍵字
    * classpath:就是在classpath下面去找
    * classpath*:就在classpath 下面所有的文件去找,包含子目錄下

總結(jié)

以上是生活随笔為你收集整理的【SSM框架系列】Spring IoC(控制反转) DI(依赖注入)注解开发的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: www.在线观看av | 天堂精品在线 | 五月婷婷在线观看视频 | 国产日韩在线免费观看 | 18视频在线观看男男 | aaa在线播放| 综合久久av | 午夜精品久久久久久久 | 国产高清视频在线免费观看 | 受虐m奴xxx在线观看 | 日本精品一区在线观看 | 亚洲AV无码成人精品区明星换面 | 久久久久国产一区 | 毛片基地站| 日本一区二区三区免费视频 | 亚洲在线观看免费视频 | 亚洲视频第一页 | 高清视频在线播放 | 国产一级免费片 | 69xxx少妇按摩视频 | 奇米一区 | 91麻豆免费看 | 黑森林福利视频导航 | 亚洲黄色中文字幕 | 欧美偷拍综合 | 成人亚洲综合 | 五月婷婷俺也去 | 中国新婚夫妻性猛交 | 男女乱淫视频 | 性欧美极品 | 一区二区成人免费视频 | 日本婷婷 | 亚洲欧洲色图 | 欧美色图亚洲自拍 | 99re99热 | 亚洲精品视频免费观看 | 一区二区视频观看 | 亚洲国产成人精品女人久久 | 日韩第一色| 91性高潮久久久久久久 | 久操免费在线视频 | 欧美综合精品 | 精品国产无码AV | 男人午夜影院 | av色在线观看 | 日本一区二区三区在线观看视频 | 免费三片在线视频 | 久久久久五月天 | 一区二区三区视频免费观看 | 色综合精品| 国产高清网站 | 一区二区三区黄色 | 久久澡 | 无码少妇一级AV片在线观看 | 我的邻居在线观看 | 男女那个视频 | 欧美一级片在线播放 | 成年人午夜网站 | 国产精品美女久久久久久 | 欧美视频一区在线观看 | 日韩一区二 | 天天操天天玩 | 涩涩综合 | 国产精品亚洲а∨天堂免在线 | 国产成人av网 | 国产乱淫av麻豆国产 | 成人 黄 色 免费播放 | 久久中文字幕一区 | 丰满少妇av | 中文字幕欧美专区 | 老女人一毛片 | 91蜜桃在线观看 | 亚洲色图第1页 | 先锋影音资源av | 日韩性插 | 欧洲精品码一区二区三区免费看 | 四虎av影院 | 国产强伦人妻毛片 | 欧美一区2区 | 亚洲精品av中文字幕在线在线 | 色屁屁一区二区 | 毛片亚洲av无码精品国产午夜 | 国产精品一区久久 | 五月婷婷一区二区 | 国产情侣呻吟对白高潮 | 噜噜噜噜私人影院 | 亚洲成av人片久久 | 黄色日批| 999在线视频 | 女人叉开腿让男人桶 | 国产超碰精品 | 毛片日韩 | 国产精品三级在线观看无码 | 国产精品丝袜黑色高跟鞋的设计特点 | 永久免费黄色片 | 国产精品情侣 | 麻豆影视在线 | 黄色复仇草 | 午夜视频在线免费看 |