IOC 操作 Bean 管理(xml注入其他类型属性)
1、字面量
(1)null值
修改Book
package com.atguigu.spring5; /** * 演示使用set方法进行注入属性 */ public class Book { //创建属性 private String bname; private String bauthor; private String address; //set方法注入 public void setBname(String bname) { this.bname = bname; } public void setBauthor(String bauthor) { this.bauthor = bauthor; } public void setAddress(String address) { this.address = address; } public void testDemo(){ System.out.println(bname+"::"+bauthor+"::"+address); }
bean1.xml
<!-- 2 set方法注入属性 --> <bean id="book" class="com.atguigu.spring5.Book"> <!-- 使用property 完成属性注入 name:类里面属性名称 value:向属性注入的值 --> <property name="bname" value="易筋经"></property> <property name="bauthor" value="达摩老祖"></property> <!-- null值 --> <property name="address"> <null/> </property> </bean>
(2)属性值包含特殊符号
bean1.xml
<!-- 2 set方法注入属性 --> <bean id="book" class="com.atguigu.spring5.Book"> <!-- 使用property 完成属性注入 name:类里面属性名称 value:向属性注入的值 --> <property name="bname" value="易筋经"></property> <property name="bauthor" value="达摩老祖"></property> <!-- null值 --> <!-- <property name="address">--> <!-- <null/>--> <!-- </property>--> <!-- 属性值中包含特殊符号 1 把<>进行转移 < > 2 把带特殊符号内容写到CDATA --> <property name="address"> <value><![CDATA[<<南京>>]]><!--CD 回车 --></value> </property> </bean>
2、注入属性-外部bean
(1)创建两个类service类和dao类
(2)在service调用dao里面的方法
spring5/新建service包/新建UserService类
package com.atguigu.spring5.service; import com.atguigu.spring5.dao.UserDao; import com.atguigu.spring5.dao.UserDaoImpl; public class UserService { public void add(){ System.out.println("service add.............."); //原始方式:创建UserDAO对象 // UserDao userdao =new UserDaoImpl(); // userdao.update(); } }
spring5/新建dao包/新建UserDao类
package com.atguigu.spring5.dao; public interface UserDao { public void update(); }
dao包/新建UserDaoImpl类
package com.atguigu.spring5.dao; public class UserDaoImpl implements UserDao{ @Override public void update() { System.out.println("dao update.............."); } }
(3)在spring牌配置文件中进行配置
UserService
package com.atguigu.spring5.service; import com.atguigu.spring5.dao.UserDao; import com.atguigu.spring5.dao.UserDaoImpl; public class UserService { // 创建UserDao类型属性,生成set方法 private UserDao userDao=new UserDaoImpl(); public void setUserDao(UserDao userDao) { this.userDao = userDao; } public void add(){ System.out.println("service add.............."); userDao.update(); //原始方式:创建UserDAO对象 // UserDao userdao =new UserDaoImpl(); // userdao.update(); } }
src下/新建bean2.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- service 和dao对象创建 --> <bean id="userService" class="com.atguigu.spring5.service.UserService"> <!-- 注入userDao对象 name属性值:类里面属性名称 ref属性:创建userDao对象bean标签id值 --> <property name="userDao" ref="userDaoImpl"></property> </bean> <bean id="userDaoImpl" class="com.atguigu.spring5.dao.UserDaoImpl"></bean> </beans>
testdemo/新建TestBean
package com.atguigu.spring5.testdemo; import com.atguigu.spring5.service.UserService; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestBean { @Test public void testAdd(){ //1 加载spring的配置文件 ApplicationContext context= new ClassPathXmlApplicationContext("bean2.xml"); //2 获取配置创建的对象 UserService userService = context.getBean("userService", UserService.class); userService.add(); } }
3、注入属性-内部bean和级联赋值
(1)一对多关系:部门和员工
一个部门有多个员工,一个员工属于一个部门
部门是一,员工是多
(2)在实体类之间表示一对多关系,员工表示所属部门,使用对象类型属性进行
spring下/新建bean包下/新建Dept类
package com.atguigu.spring5.bean; public class Dept { private String dname; public void setDname(String dname) { this.dname = dname; } @Override public String toString() { return "Dept{" + "dname='" + dname + '\'' + '}'; } }
bean包下/新建Emp类
package com.atguigu.spring5.bean; public class Emp { private String ename; private String gender; //员工属于某一个部门,属于对象形式表示 private Dept dept; public void setEname(String ename) { this.ename = ename; } public void setGender(String gender) { this.gender = gender; } public void setDept(Dept dept) { this.dept = dept; } public void add(){ System.out.println(ename+"::"+gender+"::"+dept); } }
bean3.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 内部bean --> <bean id="emp" class="com.atguigu.spring5.bean.Emp"> <!-- 设置两个普通属性 --> <property name="ename" value="lucy"></property> <property name="gender" value="女"></property> <!-- 设置对象类型属性 --> <property name="dept"> <bean id="dept" class="com.atguigu.spring5.bean.Dept"> <property name="dname" value="安保部"></property> </bean> </property> </bean> </beans>
TestBean
@Test public void testBean2(){ //1 加载spring的配置文件 ApplicationContext context= new ClassPathXmlApplicationContext("bean3.xml"); //2 获取配置创建的对象 Emp emp = context.getBean("emp", Emp.class); emp.add(); }
4、注入属性-级联赋值
(1)第一种写法
src/新建bean4.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 级联赋值 --> <bean id="emp" class="com.atguigu.spring5.bean.Emp"> <!-- 设置两个普通属性 --> <property name="ename" value="lucy"></property> <property name="gender" value="女"></property> <!-- 级联赋值 --> <property name="dept" ref="dept"></property> </bean> <bean id="dept" class="com.atguigu.spring5.bean.Dept"> <property name="dname" value="财务部"></property> </bean> </beans>
(2)第二种写法
bean4.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 级联赋值 --> <bean id="emp" class="com.atguigu.spring5.bean.Emp"> <!-- 设置两个普通属性 --> <property name="ename" value="lucy"></property> <property name="gender" value="女"></property> <!-- 级联赋值 --> <property name="dept" ref="dept"></property> <property name="dept.dname" value="技术部"></property><!-- 生成属性dept的get方法--> </bean> <bean id="dept" class="com.atguigu.spring5.bean.Dept"> <property name="dname" value="财务部"></property> </bean> </beans>
IOC 操作 Bean 管理(xml注入集合属性)
1、注入数组类型属性
2、注入List集合类型属性
3、注入Map集合类型属性
(1)创建类,定义数组、list、map、set类型属性,并生成set方法
新建模块(项目)spring5_demo2 下/spring5/collectiontype包/Stu类
package com.atguigu.spring5.collectiontype; import java.util.List; import java.util.Map; import java.util.Set; public class Stu { //1 数组类型属性 private String[] courses; //2 list集合类型属性 private List<String> list; //3 Map集合类型属性 private Map<String,String> maps; //4 set集合类型属性 private Set<String> sets; public void setCourses(String[] courses) { this.courses = courses; } public void setList(List<String> list) { this.list = list; } public void setMaps(Map<String, String> maps) { this.maps = maps; } public void setSets(Set<String> sets) { this.sets = sets; } }
(2)在spring配置文件进行配置
bean1
<?xml version="1.0" encoding="UTF-8"?> <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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 1.集合类型属性注入 --> <bean id="stu" class="com.atguigu.spring5.collectiontype.Stu"> <!-- 数组类型属性注入 --> <property name="courses"> <array> <value>java课程</value> <value>数据库课程</value> </array> </property> <!-- list集合类型属性注入 --> <property name="list"> <list> <value>张三</value> <value>小三</value> </list> </property> <!-- map集合类型属性注入 --> <property name="maps"> <map> <entry key="JAVA" value="java"></entry> <entry key="PHP" value="php"></entry> </map> </property> <!-- set集合类型属性注入 --> <property name="sets"> <set> <value>MySQL</value> <value>Redis</value> </set> </property> </bean> </beans>
spring5/testdemo/新建TestSpring5Demo1
package com.atguigu.spring5.testdemo; import com.atguigu.spring5.collectiontype.Stu; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestSpring5Demo1 { @Test public void testCollection(){ ApplicationContext context= new ClassPathXmlApplicationContext("bean1.xml"); Stu stu = context.getBean("stu", Stu.class); stu.test(); } }
4、在集合里面设置对象类型值
collectiontype下/新建Course类
package com.atguigu.spring5.collectiontype; public class Course { private String cname; public void setCname(String cname) { this.cname = cname; } @Override public String toString() { return "Course{" + "cname='" + cname + '\'' + '}'; } }
bean1.xml
<?xml version="1.0" encoding="UTF-8"?> <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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 1.集合类型属性注入 --> <bean id="stu" class="com.atguigu.spring5.collectiontype.Stu"> <!-- 数组类型属性注入 --> <property name="courses"> <array> <value>java课程</value> <value>数据库课程</value> </array> </property> <!-- list集合类型属性注入 --> <property name="list"> <list> <value>张三</value> <value>小三</value> </list> </property> <!-- map集合类型属性注入 --> <property name="maps"> <map> <entry key="JAVA" value="java"></entry> <entry key="PHP" value="php"></entry> </map> </property> <!-- set集合类型属性注入 --> <property name="sets"> <set> <value>MySQL</value> <value>Redis</value> </set> </property> <!-- 注入list集合类型,值是对象 --> <property name="courseList"> <list> <ref bean="course1"></ref> <ref bean="course2"></ref> </list> </property> </bean> <!-- 创建多个course对象 --> <bean id="course1" class="com.atguigu.spring5.collectiontype.Course"> <property name="cname" value="Spring5框架"></property> </bean> <bean id="course2" class="com.atguigu.spring5.collectiontype.Course"> <property name="cname" value="MyBatis框架"></property> </bean> </beans>