系统需求
根据商品id,查询商品信息
单表查询,不需要写代码
使用Mybatis逆向工程生成的代码
在taotao-manager-interface工程中
创建一个ItemService接口
public interface ItemService {
TbItem getItemById(long itemId);
}
实现接口
要找到接口,需要添加对接口的引用
<dependency>
<groupId>com.taotaogroupId>
<artifactId>taotao-manager-interfaceartifactId>
<version>0.0.1-SNAPSHOTversion>
dependency>
在taotao-manager-Service工程中
创建一个itemSeviceImpl的实现类
@Service
public class ItemServiceImpl implements ItemService {
@Autowired
private TbItemMapper itemMapper;
@Override
public TbItem getItemById(long itemId) {
TbItem item = itemMapper.selectByPrimaryKey(itemId);
return item;
}
}
使用Dubbo发布服务,引入jar包
父工程,控制版本号
Service,添加jar包引用
<dependency>
<groupId>com.alibabagroupId>
<artifactId>dubboartifactId>
<exclusions>
<exclusion>
<artifactId>springartifactId>
<groupId>org.springframeworkgroupId>
exclusion>
<exclusion>
<artifactId>nettyartifactId>
<groupId>org.jboss.nettygroupId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>org.apache.zookeepergroupId>
<artifactId>zookeeperartifactId>
dependency>
<dependency>
<groupId>com.github.sgroschupfgroupId>
<artifactId>zkclientartifactId>
dependency>
Maven依赖传递
引入Dubbo的时候,会把依赖的Spring版本也添加进来
排除Spring的引用,否则,可能会有版本冲突问题
同理,排除netty的引用
选中,右键Exclude Maven Artifact
在配置文件中,使用dubbo标签
需要添加dubbo标签,dubbo约束
否则,使用dubbo标签,标签提示错误
applicationContext-service.xml
xmlns:dubbo=http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
<dubbo:application name="taotao-manager" />
<dubbo:registry protocol="zookeeper" address="192.168.25.167:2181" />
<dubbo:protocol name="dubbo" port="20880" />
<dubbo:service interface="com.taotao.service.ItemService" ref="itemServiceImpl" timeout="300"/>
dubbo:application,配置应用程序,名称
dubbo:registry,配置注册中心,地址端口号,默认2181
dubbo:protocol,配置dubbo服务端口号,默认20880
这个端口号,可以改为其他端口号
只要不冲突,并且在65535范围内即可
dubbo:service,暴露服务接口
Interface,接口,配置接口的全路径名
Ref,引用接口实现,从容器中获取
itemServiceImpl
通过扫描包,扫描到具体的实现类
在容器中创建一个Bean,添加到Spring容器中
Id,默认为类名,首字母小写itemServiceImpl
<context:component-scan base-package="com.taotao.service"/>
Timeout,设置超时时间
Web工程,添加dubbo引用
<dependency>
<groupId>com.alibabagroupId>
<artifactId>dubboartifactId>
<exclusions>
<exclusion>
<artifactId>springartifactId>
<groupId>org.springframeworkgroupId>
exclusion>
<exclusion>
<artifactId>nettyartifactId>
<groupId>org.jboss.nettygroupId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>org.apache.zookeepergroupId>
<artifactId>zookeeperartifactId>
dependency>
<dependency>
<groupId>com.github.sgroschupfgroupId>
<artifactId>zkclientartifactId>
dependency>
需要在Spring容器中,引用服务
Spring MVC前端控制器,也会初始化一个Spring容器
所以,可以在Spring MVC里面直接引用服务
Springmvc.xml
同理,添加dubbo标签、约束
xmlns:dubbo=http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
<dubbo:application name="taotao-manager-web"/>
<dubbo:registry protocol="zookeeper" address="192.168.25.167:2181"/>
<dubbo:reference interface="com.taotao.service.ItemService" id="itemService" />
发布服务,需要在注册中心注册
引用服务,也需要在注册中心注册
dubbo:application,配置应用程序,程序名称
dubbo:registry,配置注册中心,地址端口号
dubbo:reference,引用服务
Web需要引用Interface接口
Pom文件,添加对接口的引用
<dependency>
<groupId>com.taotaogroupId>
<artifactId>taotao-manager-interfaceartifactId>
<version>0.0.1-SNAPSHOTversion>
dependency>
接口
需要单独提出了,存放接口的定义
服务端,发布服务,需要这个接口定义
表现层,引用服务,也需要这个接口定义
所以,把接口打成一个jar包,方便表现层的引用
虽然,Interface是工程的一个模块
但是,只要是一个jar包有坐标,就可以通过坐标引用
此时,Spring MVC容器中
就有这个Interface的代理对象,通过id给Bean起个名字
容器中,就有这个Bean对象
通过注解,注入这个对象
在Spring MVC容器初始化的时候
会把这个Bean注入到Controller中,直接调用即可
@Controller
public class ItemController {
@Autowired
private ItemService itemService;
@RequestMapping("/item/{itemId}")
@ResponseBody
public TbItem getItemById(@PathVariable Long itemId) {
TbItem tbItem = itemService.getItemById(itemId);
return tbItem;
}
}