外部bean
(1)创建两个类service类和dao类。
(2)在service调用dao里面的方法。
(3)在spring配置文件中进行配置。
UserDao接口:
package com.Keafmd.spring5.dao; /** * Keafmd * * @ClassName: UserDao * @Description: * @author: 牛哄哄的柯南 * @date: 2021-01-15 9:30 */ public interface UserDao { public void updat(); }
UserDaoImpl类:
package com.Keafmd.spring5.dao; /** * Keafmd * * @ClassName: UserDaoImpl * @Description: 实现类 * @author: 牛哄哄的柯南 * @date: 2021-01-15 9:31 */ public class UserDaoImpl implements UserDao{ @Override public void updat() { System.out.println("dao updat....."); } }
UserService 类:
package com.Keafmd.spring5.service; import com.Keafmd.spring5.dao.UserDao; import com.Keafmd.spring5.dao.UserDaoImpl; /** * Keafmd * * @ClassName: UserService * @Description: * @author: 牛哄哄的柯南 * @date: 2021-01-15 9:29 */ public class UserService { //创建UserDao类型属性,生成set方法 private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } public void add(){ System.out.println("service add....."); //1、原始方式 //创建UserDao对象 /* UserDao userDao = new UserDaoImpl(); userDao.updat();*/ //调用dao中的updat方法 userDao.updat(); } }
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"> <!--外部bean--> <!--1 service 和 dao的对象创建--> <bean id="userService" class="com.Keafmd.spring5.service.UserService"> <!--注入userDao对象 name属性:类里面的属性名称 ref属性:创建UserDao对象bean标签id值 --> <property name="userDao" ref="userDaoImpl"></property> </bean> <bean id="userDaoImpl" class="com.Keafmd.spring5.dao.UserDaoImpl"></bean> </beans>
测试类:
package com.Keafmd.spring5.testdemo; import com.Keafmd.spring5.User; import com.Keafmd.spring5.bean.Emp; import com.Keafmd.spring5.service.UserService; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * Keafmd * * @ClassName: TestBean * @Description: 注入属性,外部bean * @author: 牛哄哄的柯南 * @date: 2021-01-15 9:46 */ public class TestBean { @Test public void testBean1(){ //1、载Spring的配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean2.xml"); //2、获取配置文件中创建的对象 默认是执行无参的构造方法创建 UserService userservice =applicationContext.getBean("userService", UserService.class); //System.out.println(userservice); userservice.add(); } }
输出结果:
service add..... dao updat..... Process finished with exit code 0
输出了service的add和dao的update证明调用成功,这就是外部bean。
内部bean
(1)一对多的关系:部门和员工。
(1-1)一个部门有多个员工,一个员工属于一个部门。
(1-2)部门是一,员工是多。
(2)在实体类之间表示一对多的关系,员工表示所属部门,使用对象类型属性进行表示。
Dept类:
package com.Keafmd.spring5.bean; /** * Keafmd * * @ClassName: Dept * @Description: 部门类 * @author: 牛哄哄的柯南 * @date: 2021-01-15 9:53 */ public class Dept { private String dname; public void setDname(String dname) { this.dname = dname; } @Override public String toString() { return "Dept{" + "dname='" + dname + '\'' + '}'; } }
Emp类:
package com.Keafmd.spring5.bean; /** * Keafmd * * @ClassName: Emp * @Description: 员工类 * @author: 牛哄哄的柯南 * @date: 2021-01-15 9:53 */ 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 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.Keafmd.spring5.bean.Emp"> <!--先设置两个普通的属性--> <property name="ename" value="小明"></property> <property name="gender" value="男"></property> <!--对象类型的属性--> <property name="dept"> <bean id="dept" class="com.Keafmd.spring5.bean.Dept"> <property name="dname" value="安保部"></property> </bean> </property> </bean> </beans>
测试类:
package com.Keafmd.spring5.testdemo; import com.Keafmd.spring5.User; import com.Keafmd.spring5.bean.Emp; import com.Keafmd.spring5.service.UserService; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * Keafmd * * @ClassName: TestBean * @Description: 注入属性,内部bean * @author: 牛哄哄的柯南 * @date: 2021-01-15 9:46 */ public class TestBean { @Test public void testBean2(){ //1、载Spring的配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean3.xml"); //2、获取配置文件中创建的对象 默认是执行无参的构造方法创建 Emp emp =applicationContext.getBean("emp", Emp.class); //System.out.println(userservice); emp.add(); } }
输出结果:
小明 男 Dept{dname='安保部'} Process finished with exit code 0
这次的我们是把部门bean写到员工bean里的,这就是内部bean。
级联赋值
第一种写法
Dept类和Emp类都不变。写个新的配置文件bean4.xml,改变配置文件的内容。
Dept类:
package com.Keafmd.spring5.bean; /** * Keafmd * * @ClassName: Dept * @Description: 部门类 * @author: 牛哄哄的柯南 * @date: 2021-01-15 9:53 */ public class Dept { private String dname; public void setDname(String dname) { this.dname = dname; } @Override public String toString() { return "Dept{" + "dname='" + dname + '\'' + '}'; } }
Emp类:
package com.Keafmd.spring5.bean; /** * Keafmd * * @ClassName: Emp * @Description: 员工类 * @author: 牛哄哄的柯南 * @date: 2021-01-15 9:53 */ 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 add(){ System.out.println(ename+" "+gender+" "+dept); } }
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.Keafmd.spring5.bean.Emp"> <!--先设置两个普通的属性--> <property name="ename" value="小红"></property> <property name="gender" value="女"></property> <!--级联赋值--> <property name="dept" ref ="dept"></property> </bean> <bean id="dept" class="com.Keafmd.spring5.bean.Dept"> <property name="dname" value="财务部"></property> </bean> </beans>
测试类只改变了配置文件。
测试类:
package com.Keafmd.spring5.testdemo; import com.Keafmd.spring5.User; import com.Keafmd.spring5.bean.Emp; import com.Keafmd.spring5.service.UserService; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * Keafmd * * @ClassName: TestBean * @Description: 注入属性,内部bean * @author: 牛哄哄的柯南 * @date: 2021-01-15 9:46 */ public class TestBean { //级联赋值第一种方法测试 @Test public void testBean3(){ //1、载Spring的配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean4.xml"); //2、获取配置文件中创建的对象 默认是执行无参的构造方法创建 Emp emp =applicationContext.getBean("emp", Emp.class); //System.out.println(userservice); emp.add(); } }
输出结果:
小红 女 Dept{dname='财务部'} Process finished with exit code 0
第二种写法
Dept类不变,Emp类多加个生成dept的get方法,改变配置文件的内容,在配置文件中加上<property name="dept.dname" value="技术部"></property>语句。
Dept类:
package com.Keafmd.spring5.bean; /** * Keafmd * * @ClassName: Dept * @Description: 部门类 * @author: 牛哄哄的柯南 * @date: 2021-01-15 9:53 */ public class Dept { private String dname; public void setDname(String dname) { this.dname = dname; } @Override public String toString() { return "Dept{" + "dname='" + dname + '\'' + '}'; } }
Emp类:
package com.Keafmd.spring5.bean; /** * Keafmd * * @ClassName: Emp * @Description: 员工类 级联赋值的第二种写法 * @author: 牛哄哄的柯南 * @date: 2021-01-15 9:53 */ public class Emp { private String ename; private String gender; //表示员工属于某一个部门,使用对象的形式表示 private Dept dept; // 级联赋值的第二种办法加的语句,生成dept的get方法 public Dept getDept() { return 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 add(){ System.out.println(ename+" "+gender+" "+dept); } }
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.Keafmd.spring5.bean.Emp"> <!--先设置两个普通的属性--> <property name="ename" value="小红"></property> <property name="gender" value="女"></property> <!--级联赋值--> <property name="dept" ref ="dept"></property> <!--级联赋值第二种办法的语句,需要get方法--> <property name="dept.dname" value="技术部"></property> </bean> <bean id="dept" class="com.Keafmd.spring5.bean.Dept"> <!--<property name="dname" value="财务部"></property>--> </bean> </beans>
测试类只改变了配置文件。
测试类:
package com.Keafmd.spring5.testdemo; import com.Keafmd.spring5.User; import com.Keafmd.spring5.bean.Emp; import com.Keafmd.spring5.service.UserService; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * Keafmd * * @ClassName: TestBean * @Description: 注入属性,内部bean * @author: 牛哄哄的柯南 * @date: 2021-01-15 9:46 */ public class TestBean { //级联赋值第二种方法测试 @Test public void testBean3(){ //1、载Spring的配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean4.xml"); //2、获取配置文件中创建的对象 默认是执行无参的构造方法创建 Emp emp =applicationContext.getBean("emp", Emp.class); //System.out.println(userservice); emp.add(); } }
输出结果:
小红 女 Dept{dname='技术部'} Process finished with exit code 0
用级联赋值的第二种写法,小红的部门变为了技术部。