Spring(六)属性依赖注入(构造方法,setter方法,p命名空间,spel表达式,集合注入)

网友投稿 622 2022-11-10

Spring(六)属性依赖注入(构造方法,setter方法,p命名空间,spel表达式,集合注入)

Spring(六)属性依赖注入(构造方法,setter方法,p命名空间,spel表达式,集合注入)

属性依赖注入方式有手动装配和自动装配 一般进行的配置信息都采用手动装配,自动装配主要用在structs和spring整合。在这里只说明手动装配。

手动装配方式

手动装配方式有:

构造方法方式setter方法方式p命名空间方式spel表达式方式集合注入方式

构造方法方式

说明

构造方法方式注入即把字段放在构造方法中。然后在xml文件中为构造方法中的参数赋值。

xml配置

在bean标签中配置constructor-arg标签,其中index表示构造方法的第几个参数,(从0开始),type表示参数的数据类型,value表示参数的值。 constructor-arg还有另外一种方式

constructor-arg name="" value="">

其中构造方法中的name表示参数名,value表示参数值。一般采用第一种方式。

例子

Users类 重写了toString方法,方便下面的测试 重写了两个构造方法,注意两个构造方法参数的数据类型的区别 下面的测试我们要为uid和username赋值。即第一个构造方法。

public class Users private Integer uid; private String username; private Integer age; public Users(Integer uid, String username) { super(); this.uid = uid; this.username = username; } public Users(String username, Integer age) { super(); this.username = username; this.age = age; } public Integer getUid() { return uid; } public void setUid(Integer uid) { this.uid = uid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Users [uid=" + uid + ", username=" + username + ", age=" + age + "]"; }}

XML配置 其中在constructor-arg 标签中,我们为构造方法的第一个参数数据类型为java.lang.Integer,第二个参数的数据类型为java.lang.String

测试:

public class Test { @org.junit.Test public void testScope() { String xmlPath = "com/scx/inject/test/applicationContext.xml"; ApplicationContext applicationContext = new ClassPathXmlApplicationContext( xmlPath); Users user = applicationContext.getBean("UsersId", Users.class); System.out.println(user); }}

运行结果:

成功为第一个构造方法赋值。

setter方法方式

说明

要使用setter方法注入 类中一定要有这个字段的setter方法 而且一定要把默认的构造方法重写。因为getBean会调用默认的构造方法。 所以相比前面的Users类 加上

public Users(){ }

xml配置

使用property 标签即可 ,name表示字段名,value表示字段值

例子

XML代码:

测试代码不变 ,直接输出

成功为字段赋值。

p命名空间方式

说明

P命名空间方式是对上面的setter方法的简化,替换

property name="" value="">

。 若想使用p命名空间,必须添加命名空间

xmlns:p="id="" class="" p:字段名="字段值">

例子

在上面说了 p命名空间是对Setter方法的简化,所以只修改xml文件

运行结果

spel表达式方式

说明

spel即Spring expression的简写 。 spel是对​​​​​​ 的简化。

xml配置

在property 标签的value里面赋值使用#{} 常用的有:

#{123}、#{‘jack’} : 数字、字符串 #{beanId} :另一个bean引用 #{beanId.propName} :操作数据 #{beanId.toString()} :执行方法 #{T(类).字段|方法} :静态方法或字段

例子

Users类,我们希望: uid使用以前的方式注入 username使用#{beanId.propName}注入 age使用#{123}注入 address使用#{‘jack’} 注入 pi使用#{T(类).字段|方法} 注入

public class Users { private Integer uid; private String username="tom"; private Integer age; private String address; private double pi; public Integer getUid() { return uid; } public void setUid(Integer uid) { this.uid = uid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public double getPi() { return pi; } public void setPi(double pi) { this.pi = pi; } @Override public String toString() { return "Users [uid=" + uid + ", username=" + username + ", age=" + age + ", address=" + address + ", pi=" + pi + "]"; } }

xml代码

测试代码和前面一样。

运行结果

集合注入方式

说明

集合的注入都是给property添加子标签。

xml配置

​​ 数组: List: Set: Map: ,map存放k/v 键值对,使用描述 Properties: ​​

普通数据: 引用数据:

例子

一个集合类CollData ,里面包含多种我们常用的集合

import java.util.Arrays;import java.util.List;import java.util.Map;import java.util.Properties;import java.util.Set;public class CollData private String [] arrayData; private List listData; private Map mapData; private Set setData; private Properties propsData; public String[] getArrayData() { return arrayData; } public void setArrayData(String[] arrayData) { this.arrayData = arrayData; } public List getListData() { return listData; } public void setListData(List listData) { this.listData = listData; } public Map getMapData() { return mapData; } public void setMapData(Map mapData) { this.mapData = mapData; } public Set getSetData() { return setData; } public void setSetData(Set setData) { this.setData = setData; } public Properties getPropsData() { return propsData; } public void setPropsData(Properties propsData) { this.propsData = propsData; } @Override public String toString() { return "CollData [\narrayData=" + Arrays.toString(arrayData) + ", \nlistData=" + listData + ", \nmapData=" + mapData + ", \nsetData=" + setData + ", \npropsData=" + propsData + "]"; }}

xml代码 需要特别注意的是map集合使用​​​entry key="" value="">​​​ 键值对赋值。Properties使用

赋值。

array1 array2 array3 list1 list2 list3 set1 set2 set3 1 2 3

测试类

public class Test { @org.junit.Test public void testScope() { String xmlPath = "com/scx/inject/test/applicationContext.xml"; ApplicationContext applicationContext = new ClassPathXmlApplicationContext( xmlPath); CollData collData = applicationContext.getBean("CollDataId", CollData.class); System.out.println(collData); }}

运行结果:

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot整合Redis及Redis工具类撰写实例
下一篇:c++和数据结构 模拟栈的入栈和出栈
相关文章

 发表评论

暂时没有评论,来抢沙发吧~