目录
1..注入属性-外部 bean
(1)创建两个类 service 类和 dao 类【分别创建两个包存放两个类】
(2)在 service 调用 dao 里面的方法
(3)(后来做法)在Spring 配置文件中进行配置
1..注入属性-外部 bean
首先,复习一下javaEE的三层结构 web层、service层、dao层
我们常常提到java EE的三层或者四层结构。
四层架构:
展示层(web层)、业务逻辑层、数据访问层、信息资源层
四层架构在是开发企业应用时使用的非常经典的划分模式。
web层负责前端展示和用户请求的处理。mvc是一个设计模式,主要用户构建用户界面,目的是把展示逻辑和逻辑分离。web层通常会使用MVC模式进行构建,经常使用的mvc框架包括spring mvc,struts等,都是在web层或者展示层使用的。
业务逻辑层一般应用中会有一层service抽象,实现核心业务逻辑,事务控制也在这一层实现。
数据访问层也即dao层,重点负责数据库访问,完成持久化功能。
信息资源层主要服务资源的存储。
所以mvc和四层(三层)结构有关系,四层架构是应用的体系(分层)结构,描述了整个应用的一个完整的划分,而mvc是一个设计模式,通常会用于四层架构的展示层的构建上。
那么,通过service层去调用dao层这个过程就是引入外部bean
实现步骤:
(1)创建两个类 service 类和 dao 类【分别创建两个包存放两个类】
在service包中添加UserService类
package com.lbj.spring5.service;public class UserService {public void add(){System.out.println("service add............");}
}
在dao包中添加UserDao的接口类
再在dao包中添加UserDaoImpl实现类,让它实现UserDao的接口
结构图:
接口类UserDao的代码如下:
package com.lbj.spring5.dao;/*** Created by 14811 on 2020/12/1.*/
public class UserDaoImpl implements UserDao {@Overridepublic void update() {System.out.println("dao update..........");}
}
实现类UserDaoImpl的代码如下:
package com.lbj.spring5.dao;public class UserDaoImpl implements UserDao {@Overridepublic void update() {System.out.println("service add..........");}
}
(2)在 service 调用 dao 里面的方法
原始做法:
在UserService类中调用UserDaoImpl实现类中的方法【底层:Service要的到dao的对象】
【接口=new它的实现类的对象,这个的过程就叫做多态(抽象类或接口当做父类,父类引用指向子类对象)】
代码如下:
package com.lbj.spring5.service;import com.lbj.spring5.dao.UserDao;
import com.lbj.spring5.dao.UserDaoImpl;public class UserService {public void add(){System.out.println("service add............");//创建UserDao对象UserDao dao=new UserDaoImpl();//调用实现类中的方法dao.update();}
}
(3)(后来做法)在Spring 配置文件中进行配置
第一步:在UserService类中创建UserDao类型属性,生成set方法
注意:Spring的属性也可以是类的属性,不仅仅是String类型的属性
UserService类代码如下:
package com.lbj.spring5.service;import com.lbj.spring5.dao.UserDao;
import com.lbj.spring5.dao.UserDaoImpl;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();}
}
第二步:为了方便区分我们之前做的实验,我们新建一个bean2.xml
使用ref让一个Bean作为另外一个Bean的成员变量
<?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"><!--1.service和dao对象的创建--><bean id="userService" class="com.lbj.spring5.service.UserService"><!--注入userDao对象name属性值:类里面属性的名称ref属性:创建userDao对象bean标签的id值--><property name="userDao" ref="userDaoImpl"></property></bean><bean id="userDaoImpl" class="com.lbj.spring5.dao.UserDaoImpl"></bean>
</beans>
最后,为了方便测试,我们新建一个测试类 TestBean 类
代码如下:
package com.lbj.spring5.testdemo;import com.lbj.spring5.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestBean {@Testpublic void testUserService(){//1.加载spring配置文件ApplicationContext context=new ClassPathXmlApplicationContext("bean2.xml");//2.获取配置创建的对象,通过context得到对象UserService userService=context.getBean("userService", UserService.class);//4.通过userService调用add()方法userService.add();}
}
结果如下: