欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Sping依赖注入

发布时间:2025/4/16 编程问答 53 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Sping依赖注入 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

什么是Sping依赖注入,简单的说就是使用Spring来调用类中的构造函数给成员变量赋值。我们无法使用IOC来完全消除类之间的依赖关系,例如WEB应用中的业务层调用持久层。我们可以交由spring来维护这种依赖关系。依赖注入有多种方式,下面一一讲解。

1.构造函数注入

顾名思义,就是使用类中的构造函数,给成员变量赋值。注意,赋值的操作不是我们自己做的,而是通过配置的方式,让spring框架来为我们注入。具体代码如下:

public class AccountService{private String name;private Integer age;private Date birthday;public AccountService(String name, Integer age, Date birthday){this.name = name;this.age = age;this.birthday = birthday;}public void saveAccount(){System.out.println(name + " " + age + " " + birthday);} }

使用这种方式需要在类中提供一个对应参数列表的构造函数。
使用到的标签为constructor-arg 属性有:

  • index:指定参数在构造函数参数列表中的索引位置
  • type:指定参数在构造函数中的数据类型
  • name:指定参数在构造函数中的名称
  • value:赋给基本数据类型和String类型
  • ref:赋值给bean类型,这个bean类型必须在xml中配置
<bean id = "accountService" class="com.chester.service.impl.AccountService"><constructor-arg name="name" value="Tom"></constructor-arg><constructor-arg name="age" value="18"></constructor-arg><constructor-arg name="birthday" value="now"></constructor-arg> </bean><bean id="now" class="java.util.Date"></bean>

2.set方法注入

顾名思义,就是在类中提供需要注入成员的set方法。具体代码如下:

public class AccountServiceImpl {private String name;private Integer age;private Date birthday;public void setName(String name) {this.name = name;}public void setAge(Integer age) {this.age = age;}public void setBirthday(Date birthday) {this.birthday = birthday;}public void saveAccount(){System.out.println(name + " " + age + " " + birthday);} }

使用这种方式需要在类中提供成员变量的set函数,这里要注意set函数的写法,否则不能找到对应成员变量的set函数。
使用到的标签为property 属性有:

  • name:找的是类中set方法后面的部分
  • ref:给属性赋值是其他bean类型的
  • value:给属性赋值是基本数据类型和string类型的
<bean id="accountService" class="com.chester.service.impl.AccountServiceImpl"><property name="name" value="Tom"></property><property name="age" value="18"></property><property name="birthday" ref="now"></property></bean><bean id="now" class="java.util.Date"></bean>

这种方式也是实际开发用的比较多的方式。

3.使用p名称空间注入数据(本质依旧是调用set方法)

此种方式是通过在xml中导入p名称空间,使用p:propertylName来注入数据,它的本质仍然是调用类中的set方法实现注入功能。

java代码部分和2.set方法注入一样

xml写法如下:

<bean id="accountService" class="com.chester.service.impl.AccountServiceImpl"p:name="test" p:age="18" p:birthday-ref="now"> </bean><bean id="now" class="java.util.Date"></bean>

4.注入集合属性

顾名思义,就是给类中的集合成员传值,它用的也是set方法注入的方式,只不过变量的数据类型都是集合。我们这里介绍注入数组,List,Set,Map,Properties。具体代码如下:

public class AccountServiceImpl {private String[] myStrs;private List<String> myList;private Set<String> mySet;private Map<String, String> myMap;private Properties myProps;public void setMyStrs(String[] myStrs) {this.myStrs = myStrs;}public void setMyList(List<String> myList) {this.myList = myList;}public void setMySet(Set<String> mySet) {this.mySet = mySet;}public void setMyMap(Map<String, String> myMap) {this.myMap = myMap;}public void setMyProps(Properties myProps) {this.myProps = myProps;}public void saveAccount(){System.out.println(Arrays.toString(myStrs));System.out.println(myList);System.out.println(mySet);System.out.println(myMap);System.out.println(myProps);} } <bean id="accountService" class="com.chester.service.impl.AccountServiceImpl"><property name="myStrs"><set><value>AAA</value><value>BBB</value><value>CCC</value></set></property><property name="myList"><array><value>AAA</value><value>BBB</value><value>CCC</value></array></property><property name="mySet"><list><value>AAA</value><value>BBB</value><value>CCC</value></list></property><property name="myMap"><props><prop key="A">AAA</prop><prop key="B">BBB</prop><prop key="C">CCC</prop></props></property><property name="myProps"><map><entry key="A" value="AAA"></entry><!--or--><entry key="B"><value>BBB</value></entry></map></property></bean>

总结

以上是生活随笔为你收集整理的Sping依赖注入的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。