夜光序言:
人老的好处就是,已经没有什么可以失去的了。
正文:
先写三个接口service
package com.Test1.service;
/*
*
* @title OrderService 嗯唔:订单业务接口类
* @describe 模拟一下:熟悉的订单系统
* @author hy
* @version
* @date 2019/6/18
*
*/
public interface OrderService {
// 发送订单~
// orderid→订单
void sendToPayment(long orderId);
}
package com.Test1.service;
/*
*
* @title PaymentService 付款接口类
* @describe 模拟一下:熟悉的订单系统
* @author hy
* @version
* @date 2019/6/18
*
*/
public interface PaymentService {
// 支付
// orderid 订单id
// price 价格
// sessionid 会话id
void pay(long orderId,long price,Long sessionId);
}
package com.Test1.service;
/*
*
* @title PriceService 价格接口类
* @describe 模拟一下:熟悉的订单系统
* @author hy
* @version
* @date 2019/6/18
*
*/
public interface PriceService {
// 获取价格
// orderid 订单id
// 价格
long getPrice(long orderId);
}
之后写实现类
package com.Test1.impl;
import com.Test1.service.OrderService;
import com.Test1.service.PaymentService;
import com.Test1.service.PriceService;
import com.google.inject.Inject;
/*
*
* @title OrderServiceImpl
* @describe 订单业务实现类,模拟订单系统
* @author hy
* @version
* @date 2019/6/18
*
*/
public class OrderServiceImpl implements OrderService {
// 表示类的依赖,需要加上final
private final PriceService priceService;
private final PaymentService paymentService;
private final SessionManager sessionManager;
// 表示类的状态,不用加上final
private Long ordersPaid = 0L;
@Inject
public OrderServiceImpl (PriceService priceService,PaymentService paymentService,
SessionManager sessionManager){
super();
this.priceService = priceService;
this.paymentService = paymentService;
this.sessionManager = sessionManager;
}
@Override
public void sendToPayment(long orderId){
long price = priceService.getPrice(orderId);
paymentService.pay(orderId,price,sessionManager.getSessionId());
ordersPaid = ordersPaid+1;
System.out.println("订购成功:price="+price+"SessionId="+sessionManager.getSessionId()
+"ordersPaid="+ordersPaid);
}
}
package com.Test1.impl;
/*
*
* @title PaymentServiceImpl
* @describe 付款业务实现类
* @author hy
* @version
* @date 2019/6/18
*
*/
import com.Test1.service.PaymentService;
public class PaymentServiceImpl implements PaymentService {
@Override
public void pay(long orderId,long price, Long sessionId){
}
}
package com.Test1.impl;
/*
*
* @title PriceServiceImpl
* @describe 价格业务实现类
* @author hy
* @version
* @date 2019/6/20
*
*/
import com.Test1.service.PriceService;
public class PriceServiceImpl implements PriceService {
@Override
public long getPrice(long orderId){
return 456L;
}
}
package com.Test1.impl;
/*
*
* @title ServerModule类
* @describe 绑定依赖,十分关键
* @author hy/夜光
* @version
* @date 2019/6/20
*
*/
import com.Test1.service.OrderService;
import com.Test1.service.PaymentService;
import com.Test1.service.PriceService;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
public class ServerModule extends AbstractModule {
@Override
protected void configure(){
bind(OrderService.class).to(OrderServiceImpl.class);
bind(PaymentService.class).to(PaymentServiceImpl.class);
bind(PriceService.class).to(PriceServiceImpl.class);
}
@Provides
@SessionId
Long generateSessionId(){
return System.currentTimeMillis();
}
}
package com.Test1.impl;
import com.google.inject.BindingAnnotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/*
*
* @title SessionId 注解
* @describe 用来绑定数据
* @author hy
* @version
* @date 2019/6/20
*
*/
@Retention(RetentionPolicy.RUNTIME)
@BindingAnnotation
public @interface SessionId {
}
package com.Test1.impl;
/*
*
* @title SessionManager
* @describe 模拟订单系统
* @author hy
* @version
* @date 2019/6/20
*
*/
import com.google.inject.Inject;
import com.google.inject.Provider;
public class SessionManager {
private final Provider<Long> sessionIdProvider;
@Inject
public SessionManager(@SessionId Provider<Long> sessionIdProvider){
super();
this.sessionIdProvider = sessionIdProvider;
}
public Long getSessionId(){
return sessionIdProvider.get();
}
}