首先理解几个知识点
1.类与类之间的依赖关系
当一个类A完成某个功能,需要类B的的帮助来实现,那么就叫A依赖于B
比如:
B里边有一个功能是做加法运算的.A有两个数字需要做加法运算,那么A就需要调用B中的加法运算功能,那么这个就是A依赖于B
2.MVC 是一种编程思想,使各个业务分层管理,更加细化,提高代码的复用性,可维护性!
M model 应用程序中用于处理逻辑的部分 mybatis hibernate SpringJDBC Template Dao层和sevice
持久层和服务层
V view 视图层 应用程序中用于数据展示的部分 html jsp freemarker velocity themyleaf
C contorller 控制器 是指应用程序中页面和数据交互的部分
在开发模式中我们一般 contorller(servlet)>>service>>dao
3.面向接口编程
面向接口编程就是先把客户的业务逻辑线提取出来,作为接口,业务具体实现通过该接口的实现类来完成。当客户需求变化时,只需编写该业务逻辑的新的实现类,通过更改配置文件中该接口 的实现类就可以完成需求,不需要改写现有代码,减少对系统的影响。
4.高内聚,低耦合
高内聚 是指一个模块是有一下相关性很强的代码组成!
低耦合 减少类于类之间的关联或关系
5.spring 是什么?
Spring 是一款轻量级的控制反转(IOC)和面向切面(AOP)编程的框架
6.IOC是什么?
IOC 控制反转 inversion of control
IOC 是一种概念,是把程序中,类于类之间的依赖关系交给外部容器去处理,实现低耦合编程,解耦!不希望类于类之间都是new出来的!
Spring 的控制反转是通过DI 来实现的,DI(dependency injection) 是依赖注入
IOC是通过反射机制创建对象之后,通过DI 依赖注入给需要以来的对象赋值,通过反射调用构造方法或者set方法,给属性赋值
比如:
A依赖B
那么IOC会通过反射创建A和B的对象,通过DI依赖注入,给A中的B属性赋值!
需要的jar包
四个核心jar包 spring-beans/ spring-context /spring-core/spring-expression
额外包: commons-logging log-4j 日志包
junit 单元测试包
还需要一个配置文件官方定义名称 applicationContext.xml (可以修改名称,但是一般都用这个)
在文件中需要有配置约束,可以去官网文档中
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
下边开工
首先导入jar包,在这里就不演示了 我用的开发工具是IDEA 直接引入就可以了,eclipse需要手动添加
然后编写Dao持久层和Service服务层
开发Dao持久层 用于访问数据库资源
定义接口
import java.util.List;
public interface UserDAO {
List find();
}
使用druid连接方式
public class UserDruidImpl implements UserDAO {
@Override
public List find() {
System.out.println("使用的是德鲁伊连接");
return null;
}
}
使用JDBC连接方式
public class UserJDBCImpl implements UserDAO {
@Override
public List find() {
System.out.println("使用的是JDBC连接");
return null;
}
}
两种方式实现一个接口
开发service 服务层 的业务逻辑
定义接口
public interface UserService {
List select();
}
实现接口
public class UserServiceImpl implements UserService {
//因为服务层的业务逻辑依赖DAO层的数据查询,所以要在这里定义DAO层对象,
// 以前在公共能里new一个DAO层就可以了,但是利用SpringIOC可以降低类于类之间的耦合
//所以在这里需要定义DAO层的属性
private UserDAO userDAO;
//这里使用面向接口编程,我前面写了两个实现,
// 如果开始使用德鲁伊的,后来打算更改成JDBC的那么问题就来了,需要整改代码
//使用面向接口后期只需要更改配置文件
@Override
public List select() {
this.userDAO.find();//调用DAO层的方法
return null;
}
//添加set方法,因为DI是通过构造函数或者set方法给属性赋值
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
}
编写配置文件
编写测试用例:
public class test {
public static void main(String[] args) {
//注册配置文件 得到管理者对象
ClassPathXmlApplicationContext context=
new ClassPathXmlApplicationContext("applicationContext.xml");
//获取服务层的实例
UserServiceImpl userService = (UserServiceImpl)context.getBean("userService");
//调用方法
userService.select();
}
输出结果:
网友评论