Spring属性注入
程序员文章站
2022-03-03 12:32:48
...
介绍
-
定义:创建对象时候,向类里面属性里面设置值
-
三种属性注入的方式:
- 有参构造
- set方法
-
在spring框架里面,支持前两种方式
(1)set方法注入(重点)
(2)有参数构造注入
有参构造注入属性
- 原始方法:
- 在类里面写有参构造
- main方法声明时加入构造参数
- spring实现:在xml文件中实现第二步
xml文件:
<!-- 有参构造注入属性 -->
1. <bean id="demo" class="cn.itclass.prosperiy.Test">
<!-- 属性注入 -->
<constructor-arg name="name" value="张宇" > </constructor-arg>
</bean>
public class Test {
private String name;
//构造
public Test(String name) {
this.name=name;
}
public void show() {
System.out.println("name=:::"+name);
}
- 对象构造
- 属性注入 : name=“” 类里面方法的名称,第二个参数是属性的值
set属性构造
- 原始方法:
- 在类里面写set方法
- main方法声明对象
- 对象调用set方法
- spring实现:在xml文件中实现第2.3.步
- xml
1. 类对象的声明
<bean id="Book" class="cn.itclass.prosperiy.Testset">
2. 调用set方法设置属性:注意name是属性的名称不是方法中形参的名称
name=“”:类里面属性参数(private类型)的名称
value=:参数的值
-->
<property name="bookName" value="平凡的世界"></property>
</bean>
- 类
public class Testset {
private String bookName;
public void setBookName(String book) {
this.bookName = book;
}
对象属性注入:重点
-
引入案例:
有两个类:service和dao,想要在service中调用到dao,必须在service中得到dao对象
原始做法:在service中声明dao对象,用对象再去调用dao的方法 -
思想:
在service中设置一个dao类型的属性,在xml文件中吧dao作为属性注入到service中 -
具体实现过程:
- 在service中把dao作为类型属性
- 生成dao类型的属性的set方法
public class UserService {
//1 在类中设置Dao属性
private UserDao userDao;
//2 设置userdao的set方法
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
- 在配置文件中注入关系:!!
- 设置dao类型【·作为属性的类】的对象
- 设置service类型【接收属性的类】对象
- 属性注入:ref引用dao类型–而不是value类型
<!--对象注入 -->
<!-- 首先创建userDao和userService的对象 -->
<bean id="userDao" class="cn.itclass.prosperiy.UserDao"></bean>
<bean id="userService" class="cn.itclass.prosperiy.UserService">
<!-- 对象参数设置 -->
<!-- ref引用对象userDao 值是上面UserDao对象的id -->
<property name="userDao" ref="userDao"></property>
</bean>
P名称空间注入
- 与普通属性注入类似,只是方法不同,以下只写了xml文件内容
xml引入
xmlns:p="http://www.springframework.org/schema/p"
<!-- P名称空间注入 -->
<bean id="userYear" class="cn.itclass.prosperiy.UserService" p:userYear="七年"></bean>
复杂类型注入
数组
list集合
map集合
properties类型
::以下是XML中的内容
- 这几种类型作为属性
- xml中实现
<!-- 复杂类型注入 -->
<bean id="userServiceF" class="cn.itclass.prosperiy.UserService">
<!-- 数组 -->
<property name="arr">
<!-- value -->
<list>
<value>我</value>
<value>ai我家</value>
</list>
</property>
<!-- map -->
<property name="map">
<map>
<entry key="张宇" value="宝"></entry>
<entry key="张宇" value="宝"></entry>
</map>
</property>
<!-- list -->
<property name="list">
<list>
<value>横刀夺爱</value>
<value>横刀夺爱</value>
<value>横刀夺爱</value>
<value>横刀夺爱</value>
</list>
</property>
<!-- properties-->
<property name="properties">
<props>
<prop key="张宇">你猜我</prop>
<prop key="额捶你">尅阿布</prop>
</props>
</property>
</bean>