1. 概述
定义数据访问组件AlphaDao
、业务组件AlphaService
、控制器AlphaController
,并通过注解的方式将它们委托给Spring容器。
2. 数据访问组件AlphaDao
package com.nowcoder.community.dao;
public interface AlphaDao {
String select();
}
2.1 Dao接口的两个实现类
AlphaDao接口
有两个实现类:AlphaDaoHibernateImpl
、AlphaDaoMyBatisImpl
。
其中,由于添加了@Primary注解,所以AlphaDaoMyBatisImpl
的优先级更高。
2.1.1 类AlphaDaoHibernateImpl
package com.nowcoder.community.dao;
import org.springframework.stereotype.Repository;
@Repository("alphaHibernate")
public class AlphaDaoHibernateImpl implements AlphaDao {
@Override
public String select() {
return "Hibernate";
}
}
2.1.2 类AlphaDaoMyBatisImpl
package com.nowcoder.community.dao;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Repository;
@Repository("alphaBatis")
@Primary
public class AlphaDaoMyBatisImpl implements AlphaDao {
@Override
public String select() {
return "MyBatis";
}
}
3. 业务组件AlphaService
通过注解@Autowired
注入AlphaDao
,然后调用该接口的select()
方法。
package com.nowcoder.community.service;
import com.nowcoder.community.dao.AlphaDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Service
public class AlphaService {
@Autowired
private AlphaDao alphaDao;
public AlphaService() {
System.out.println("实例化AlphaService");
}
@PostConstruct
public void init() {
System.out.println("初始化AlphaService");
}
@PreDestroy
public void destroy() {
System.out.println("销毁AlphaService");
}
public String find() {
return alphaDao.select();
}
}
4. 控制器AlphaController
通过注解@Autowired
注入AlphaService
,然后调用该接口的find()
方法。
package com.nowcoder.community.controller;
import com.nowcoder.community.service.AlphaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/alpha")
public class AlphaController {
@Autowired
private AlphaService alphaService;
@RequestMapping("/hello")
@ResponseBody
public String sayHello() {
return "Hello Spring Boot.";
}
@RequestMapping("/data")
@ResponseBody
public String getData() {
return alphaService.find();
}
}
5. 开发过程思想
-
controller
处理浏览器请求,处理请求的过程中调用service
层业务组件,业务组件会调用dao
层去访问数据库,彼此相互依赖,就可以调用依赖注入的方式实现。
-
controlle
r在处理请求的过程中会先注入service
,再写一个getData()
方法,即调用了service
业务组件的find()
方法,而service的find()
方法是通过调用dao的select()
方法实现的。