IOC操作Bean管理(基于xml)
IOC操作Bean管理(基于xml)
1. 什么是Bean管理
- Bean管理指的是两个操作
- Spring创建对象
- Spring注入属性
2. 创建对象
<bean id="dao" class="com.zyy.UserDao"></bean>
- 在spring配置文件中,使用bean标签,标签里添加对应的属性,就可以实现对象创建
- 在bean标签有很多属性
- id:唯一标识
- class:类全路径(包类路径)
- 创建对象时,默认也是执行无参数构造方法完成对象创建
3. 注入属性
- DI:依赖注入,就是注入属性
1. 使用set方法注入
-
创建类,定义属性和对应的set方法
public class Book { private String bname; private String bauthor; public void setBname(String bname) { this.bname = bname; } public void setBauthor(String bauthor) { this.bauthor = bauthor; } public void testDemo(){ System.out.println(bname + "::" + bauthor); } } -
在spring配置文件配置对象创建,配置属性注入
<bean id="book" class="com.zyy.sprinf5.Book"> <property name="bname" value="123" /> <property name="bauthor" value="zyy" /> </bean>
2. 有参构造进行注入
-
创建类,定义属性,创建属性对应有参构造方法
public class Order { public String oname; public String address; public Order(String oname, String address) { this.oname = oname; this.address = address; } } -
在spring配置文件中配置
<bean id="order" class="com.zyy.spring_demo.Order"> <constructor-arg name="oname" value="compucter"></constructor-arg> <constructor-arg name="address" value="china"></constructor-arg> </bean>
3. p空间名称注入(了解):使用p名称空间注入,可以简化基于xml配置方式
-
添加p名称空间在配置文件中
<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" -
进行属性注入,在bean标签里面进行操作
<bean id="book" class="com.zyy.spring_demo.Book" p:bname="how to learn" p:bauthor="zyy"></bean>
4. xml其他类型属性注入
-
字面量
-
null值
<property name="address"> <null/> </property> -
属性值包含特殊符号
<!--属性值包含特殊符号 1 把<>转义为< > 2 把带特殊符号的内容写到CDATA --> <property name="address"> <value><![CDATA[<<newyork>>]]></value> </property>
-
-
注入属性-外部bean
-
创建两个类service和dao类
-
在service调用dao里面的方法
-
在spring配置文件中进行配置
public class UserService{ //创建UserDao类型属性,生成set方法 private UserDao userDao; public void setUserDao(UserDao userDao){ this.userDao = userDao; } public void add(){ System.out.println("service add....."); userDao.update(); } }<bean id="userService" class="com.zyy.springDemo.service.UserService"> <!-- 注入userDao对象 name:属性名称 ref:创建userDao对象bean标签id值 --> <property name="userDao" ref="userDaoImpl"></property> </bean> <bean id="userDaoImpl" class="com.zyy.springDemo.dao.UserDaoImpl"></bean>
-
-
内部bean与级联赋值
-
对多关系:部门和员工。一个部门有多个员工,一个员工属于一个部门。部门是一,员工是多。
-
在实体类之间表示一-对多关系,员工表示所属部门,使用对象类型属性进行表示
public class Dept { private String dname; public void setDname(String dname) { this.dname = dname; } @Override public String toString() { return "Dept{" + "dname='" + dname + '\'' + '}'; } } public class Emp { private String ename; private String gender; //员工属于某一部门,适用对象形式表示 private Dept dept; public void setDept(Dept dept) { this.dept = dept; } public void setEname(String ename) { this.ename = ename; } public void setGender(String gender) { this.gender = gender; } public void testDemo(){ System.out.println(ename + "::" + gender + "::" + dept.toString()); } }<!--内部bean--> <bean id="emp" class="com.zyy.spring_demo.Emp"> <!-- 设置两个普通属性--> <property name="ename" value="bob"/> <property name="gender" value="M"/> <!-- 设置对象属性--> <property name="dept"> <bean id="dpt" class="com.zyy.spring_demo.Dept"> <property name="dname" value="安保部"/> </bean> </property> </bean><!--级联赋值--> <!--第一种写法--> <bean id="emp" class="com.zyy.spring_demo.Emp"> <!-- 设置两个普通属性--> <property name="ename" value="bob"/> <property name="gender" value="M"/> <!-- 设置对象属性--> <property name="dept" ref="dpt"/> </bean> <bean id="dpt" class="com.zyy.spring_demo.Dept"> <property name="dname" value="安保部"/> </bean> <!--第二种写法--> <!--不过要在Emp类中先声名dept的get方法--> <bean id="emp" class="com.zyy.spring_demo.Emp"> <!-- 设置两个普通属性--> <property name="ename" value="bob"/> <property name="gender" value="M"/> <!-- 设置对象属性--> <property name="dept.dame" value="安保部"/> </bean>
-
5. XML注入集合属性
1. 注入数组、List集合、Map集合类型属性
-
创建类,定义数组、list、 map、set类型属性,生成对应set方法
public class Stu { public String[] str; public List<String> list; public Map<String, String> map; public Set<String> set; public void setStr(String[] str) { this.str = str; } public void setList(List<String> list) { this.list = list; } public void setMap(Map<String, String> map) { this.map = map; } public void setSet(Set<String> set) { this.set = set; } public void test(){ System.out.println(Arrays.toString(str)); System.out.println(list); System.out.println(map); System.out.println(set); } } -
在spring配置文件进行配置
<bean id="stu" class="com.zyy.spring_demo.Stu"> <!-- 数组类型注入--> <property name="str"> <array> <value>123</value> <value>123</value> </array> </property> <!-- 列表类型注入--> <property name="list"> <list> <value>456</value> <value>456</value> </list> </property> <!-- map类型注入--> <property name="map"> <map> <entry key="qwe" value="qwe"></entry> <entry key="zxc" value="zxc"></entry> </map> </property> <!-- set类型注入--> <property name="set"> <set> <value>789</value> <value>111</value> </set> </property> </bean>
2. 在集合里面设置对象类型值
-
stu类中有List
属性,Course为对象 -
在spring配置文件中配置
<bean id="stu" class="com.zyy.spring_demo.Stu"> <property name="courseList"> <list> <ref bean="course1"></ref> <ref bean="course2"></ref> </list> </property> </bean> <bean id="course1" class="com.zyy.spring_demo.Course"> <property name="cname" value="123"/> </bean> <bean id="course2" class="com.zyy.spring_demo.Course"> <property name="cname" value="456"/> </bean>
3. 把集合注入部分提取出来作为公共部分
-
在spring配置文件中添加名称空间util
xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> -
使用util标签完成list集合注入提取
<util:list id="bookList" > <value>易筋经</value> <value>九阴真经</value> <value>九阳神功</value> </util:list> -
注入使用
<bean id="book" class="com.zyy.spring_demo.Book> <property name="list" ref= "bookList"></property〉 </bean

浙公网安备 33010602011771号