目录
外部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
用级联赋值的第二种写法,小红的部门变为了技术部。
看完如果对你有帮助,感谢点赞支持!
如果你是电脑端的话,看到右下角的 “一键三连” 了吗,没错点它[哈哈]
加油!
共同努力!
Keafmd