工程目录
本次demo的工程目录如下:
注解:其中涂了红色的请忽略,是做其他作用的。包名为:justspring,下面有两个包分别是dao和service。dao用于模拟以后的数据库操作,service,顾名思义是服务层。
这两个包当中各有两个文件,一个是接口(interface)一个是接口的实现(interfaceImpl)。
详细代码(version 1.0)
dao(数据持久层)
//dao.java 文件名(下同)
package justspring.dao;
public interface Dao {
String sayHello();
}
//daoImpl.java
//daoImpl.java
package justspring.dao;
public class DaoImpl implements Dao {
@Override
public String sayHello() {
return "hello by dao";
}
}
以上是dao层的代码,因为这是一个demo,所以每个文件只有一个方法用于示范。在真实的环境当中,dao层应该是和数据库打交道的,dao只提供接口而具体的实现可以通过mybatis的sql映射来实现,或者自己编写数据库的操作语句。在这里,因为是demo所以采用了后者,并且没有写数据库操作语句。
service(服务层)
//service.java
package justspring.service;
public interface Service {
String sayHello();
String otherService();
}
//serviceImpl.java
package justspring.service;
import justspring.dao.Dao;
public class ServiceImpl implements Service {
private Dao dao;
public void setDao(Dao dao) {
this.dao = dao;
}
@Override
public String sayHello() {
return dao.sayHello();
}
@Override
public String otherService() {
return "other service";
}
}
服务,是用来承接控制层和数据层的,数据层取得的数据要在这里进行各种逻辑操作。将service细分为两小层:
service 服务接口层
serviceImpl 服务实现层
服务接口层很简单,就是将提供的服务逐一的列出来,不管具体的实现。服务实现层,则是负责实现每一个服务,这样有利于后期的维护和升级。一般来说,我们从数据库查到的信息都是要拿来进行各种逻辑操作的,这个操作的场所正是服务实现层。所以,等下会在服务实现层里面由spring注入dao接口。既然如此为什么服务实现层不直接实现dao接口就好了呢?因为,真正的系统里面还会有一些不依靠数据库或者不同数据库的操作,所以其他服务需要在服务接口层进行声明。
在这里,最重要的就是这个serviceImpl了。它负责实现服务,我们可以看到这里面有一个Dao的对象,但是奇怪的是我们并没有给它new任何的实例。如果你对spring有一点了解的话就会知道,这里将会使用spring的依赖注入(Ioc)来实现了。后面的spring的配置文件里会有说明。
这里有两个方法,其中的sayHello方法是使用了dao的方法,otherService则可以想象成是一些不需要数据库的服务。
spring配置文件
相信熟悉spring的都会知道,spring需要有一个配置文件,主要就是用来配置bean的。所以,这个文件很重要,随着spring的发展,越来越多简便的配置方法也出来了,很容易把人搞晕,我这次重新研究的重点就是想找到最简便最清晰的配置方法。但是,我还没研究出来,所以这里采用最原始的配置方法来演示。
//spring1.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.spring