夜光:@guice依赖注入(五)

夜光序言:

人老的好处就是,已经没有什么可以失去的了。

 

 

正文:

先写三个接口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();
    }


}

猜你喜欢

转载自blog.csdn.net/weixin_41987706/article/details/92961859