關(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>紅樓夢(mèng)</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é)號(hào)">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"
<!--加上這個(gè)-->
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)行注入,簡(jiǎn)潔方便c-namespace:通過構(gòu)造器進(jìn)行注入,需要在java類文件中加上有參構(gòu)造器和無參構(gòu)造器
Spring p-namespace和c-namespace用法
為什么要講Spring的 p-namespace,c-namespace
- 對(duì)于簡(jiǎn)單項(xiàng)目或代碼,可以起到簡(jiǎn)化的作用
- 加強(qiáng)對(duì)Spring新知識(shí)的學(xué)習(xí)
- 學(xué)習(xí)就是了,哪來那么多為什么!
1、p-namespace
①又叫p-命名空間,
②它是什么意思呢?
首先這樣子講吧,以前我們寫bean的時(shí)候?yàn)槟硞€(gè)對(duì)象的屬性注入值有兩種方式,一種是有參構(gòu)造(constructor-arg),一種是通過(property標(biāo)簽為指定屬性注入值)
③而p正是property的首字母,所以它是干嘛的大家應(yīng)該可以猜得到了
④純粹上是為了簡(jiǎn)化吧(個(gè)人認(rèn)為)
⑤我們直接上例子來學(xué)習(xí)吧
首先在使用p命名空間之前你需要在相應(yīng)的xml文件內(nèi)寫入一些支持配置信息

xmlns:p="http://www.springframework.org/schema/p"
項(xiàng)目結(jié)構(gòu)搭建好,還是上節(jié)筆記搭建的(傳送門在博文(個(gè)_個(gè)))

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;
}
}
測(cè)試類寫好

輸出看看結(jié)果

這需要注意一下p標(biāo)簽后面的是屬性的名字,不是setter參數(shù)的名字!?。?!

2、c-namespace
①又叫c-命名空間,
②它是什么意思呢?
就是用來通過有參構(gòu)造為對(duì)象注入初始屬性值
③而c正是constructor-arg的首字母,所以它是干嘛的大家應(yīng)該也可以猜得到了
④純粹上是為了簡(jiǎn)化吧(個(gè)人認(rèn)為)
⑤我們直接上例子來學(xué)習(xí)吧
首先在使用c命名空間之前你需要在相應(yīng)的xml文件內(nèi)寫入一些支持配置信息
xmlns:c="http://www.springframework.org/schema/c"
我們對(duì)上面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哈哈~
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Boot中Redis數(shù)據(jù)庫的使用實(shí)例
Spring Boot中除了對(duì)常用的關(guān)系型數(shù)據(jù)庫提供了優(yōu)秀的自動(dòng)化支持之外,對(duì)于很多NoSQL數(shù)據(jù)庫一樣提供了自動(dòng)化配置的支持。本篇文章主要介紹了Spring Boot中Redis的使用實(shí)例代碼,有興趣的開業(yè)了解一下。2017-04-04
Java注解Annotation原理及自定義注解代碼實(shí)例
這篇文章主要介紹了Java注解Annotation原理及自定義注解代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
MyBatis-Plus 修改和添加自動(dòng)填充時(shí)間方式
這篇文章主要介紹了MyBatis-Plus 修改和添加自動(dòng)填充時(shí)間方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
Java數(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-05
spring security與corsFilter沖突的解決方案
這篇文章主要介紹了spring security與corsFilter沖突的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
spring 整合kafka監(jiān)聽消費(fèi)的配置過程
這篇文章主要介紹了spring 整合kafka監(jiān)聽消費(fèi)的配置過程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
springboot mybatis調(diào)用多個(gè)數(shù)據(jù)源引發(fā)的錯(cuò)誤問題
這篇文章主要介紹了springboot mybatis調(diào)用多個(gè)數(shù)據(jù)源引發(fā)的錯(cuò)誤問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01

