關(guān)于Spring不同類型的注入方式 p-namespace,c-namespace
Spring不同類型的注入方式
1、不同類型的注入方式
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="address" class="com.hu.pojo.Address"> <property name="address" value="lalala"/> </bean> <bean id="student" class="com.hu.pojo.Student"> <!--注入value--> <property name="name" value="pengpeng"/> <!--第二種bean注入,ref--> <property name="address" ref="address"/> <!--String[]數(shù)組注入--> <property name="book"> <array> <value>紅樓夢</value> <value>水滸傳</value> </array> </property> <!--list注入--> <property name="hobbys"> <list> <value>聽歌</value> <value>make</value> </list> </property> <!--map注入--> <property name="card"> <map> <entry key="gender" value="male"/> </map> </property> <!--set注入--> <property name="games"> <set> <value>lol</value> </set> </property> <!--空值--> <property name="wife" value=""/> <!--properties注入--> <property name="info"> <props> <prop key="學(xué)號">15200000</prop> <prop key="專業(yè)">CS</prop> </props> </property> </bean> </beans>
2、p-namespace以及c-namespace
2.1 添加方法
<?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:p="http://www.springframework.org/schema/p" <!--加上這個--> xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="user" class="com.hu.pojo.User" p:name="鵬鵬"/> </beans>
2.2 p和c區(qū)別
p-namespace
:通過值進(jìn)行注入,簡潔方便c-namespace
:通過構(gòu)造器進(jìn)行注入,需要在java類文件中加上有參構(gòu)造器和無參構(gòu)造器
Spring p-namespace和c-namespace用法
為什么要講Spring的 p-namespace,c-namespace
- 對于簡單項(xiàng)目或代碼,可以起到簡化的作用
- 加強(qiáng)對Spring新知識的學(xué)習(xí)
- 學(xué)習(xí)就是了,哪來那么多為什么!
1、p-namespace
①又叫p-命名空間,
②它是什么意思呢?
首先這樣子講吧,以前我們寫bean的時候?yàn)槟硞€對象的屬性注入值有兩種方式,一種是有參構(gòu)造(constructor-arg),一種是通過(property標(biāo)簽為指定屬性注入值)
③而p正是property的首字母,所以它是干嘛的大家應(yīng)該可以猜得到了
④純粹上是為了簡化吧(個人認(rèn)為)
⑤我們直接上例子來學(xué)習(xí)吧
首先在使用p命名空間之前你需要在相應(yīng)的xml文件內(nèi)寫入一些支持配置信息
xmlns:p="http://www.springframework.org/schema/p"
項(xiàng)目結(jié)構(gòu)搭建好,還是上節(jié)筆記搭建的(傳送門在博文(個_個))
package com.ysj.study; @SuppressWarnings("ALL") public class HelloDemo1 { private String name; private int age; public HelloDemo1(){ System.out.println("HelloDemo1的 無 參構(gòu)造"); } public HelloDemo1(String name) { System.out.println("HelloDemo1的 有 參構(gòu)造"); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
測試類寫好
輸出看看結(jié)果
這需要注意一下p標(biāo)簽后面的是屬性的名字,不是setter參數(shù)的名字?。。?!
2、c-namespace
①又叫c-命名空間,
②它是什么意思呢?
就是用來通過有參構(gòu)造為對象注入初始屬性值
③而c正是constructor-arg的首字母,所以它是干嘛的大家應(yīng)該也可以猜得到了
④純粹上是為了簡化吧(個人認(rèn)為)
⑤我們直接上例子來學(xué)習(xí)吧
首先在使用c命名空間之前你需要在相應(yīng)的xml文件內(nèi)寫入一些支持配置信息
xmlns:c="http://www.springframework.org/schema/c"
我們對上面HelloDemo類的有參構(gòu)造進(jìn)行一些修改
修改為如下的beans.xml代碼
輸出結(jié)果看看
我們把setter方法都去掉,發(fā)現(xiàn)還是可以運(yùn)行的,所以c-命名空間的用法和constructor-agr是一模一樣的
只需要注意下面的圖例就可以
c-namespace的拓展:
其實(shí)c-namespace除了通過參數(shù)名字來注入值以外,還可以通過參數(shù)索引來注入依賴值。如下
輸出結(jié)果還是可以的
關(guān)于p-namespace和c-namespace的用法就這么多,慢慢吸收O(∩_∩)O哈哈~
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Boot中Redis數(shù)據(jù)庫的使用實(shí)例
Spring Boot中除了對常用的關(guān)系型數(shù)據(jù)庫提供了優(yōu)秀的自動化支持之外,對于很多NoSQL數(shù)據(jù)庫一樣提供了自動化配置的支持。本篇文章主要介紹了Spring Boot中Redis的使用實(shí)例代碼,有興趣的開業(yè)了解一下。2017-04-04Java注解Annotation原理及自定義注解代碼實(shí)例
這篇文章主要介紹了Java注解Annotation原理及自定義注解代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10Java數(shù)據(jù)結(jié)構(gòu)中雙向鏈表的實(shí)現(xiàn)
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)中雙向鏈表的實(shí)現(xiàn),雙向鏈表是一種常見的數(shù)據(jù)結(jié)構(gòu),它允許在鏈表中的任意位置進(jìn)行高效的插入和刪除操作,需要的朋友可以參考下2022-05-05spring security與corsFilter沖突的解決方案
這篇文章主要介紹了spring security與corsFilter沖突的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11spring 整合kafka監(jiān)聽消費(fèi)的配置過程
這篇文章主要介紹了spring 整合kafka監(jiān)聽消費(fèi)的配置過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03springboot mybatis調(diào)用多個數(shù)據(jù)源引發(fā)的錯誤問題
這篇文章主要介紹了springboot mybatis調(diào)用多個數(shù)據(jù)源引發(fā)的錯誤問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01