微前端架构如何改变企业的开发模式与效率提升
622
2022-11-10
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配置
数组: Set:
例子
一个集合类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使用
赋值。
测试类
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~