3

designthinkings | Spring Boot 演示责任链

 1 year ago
source link: https://benpaodewoniu.github.io/2022/12/26/designthinkings11/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

这个责任链演示是最基础的责任链使用。

链上有playeatsleep服务。通过 restful 进行测试。

restful controller

package com.lou.springboot.controller;

import com.lou.springboot.Message;
import com.lou.springboot.ServiceImpl;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
public class DayController {

@Resource
private ServiceImpl service;

@GetMapping("/test")
public String dayOfThings() {
Message message = new Message(true, true, true);
return service.dayOfThings(message);
}
}

Message

package com.lou.springboot;

import lombok.Data;

@Data
public class Message {
public Boolean eat;
public Boolean sleep;
public Boolean play;

public Message(Boolean eat, Boolean sleep, Boolean play) {
this.eat = eat;
this.sleep = sleep;
this.play = play;
}
}

责任链演示

package com.lou.springboot;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;


interface ComponentConsumer<T> {
boolean deal(T t);
}

@Component
@Order(2)
class EatComponent implements ComponentConsumer<Message> {

private static final Logger logger = LoggerFactory.getLogger(Component.class);

@Override
public boolean deal(Message message) {
return message.getEat();
}
}

@Component
@Order(3)
class SleepComponent implements ComponentConsumer<Message> {

private static final Logger logger = LoggerFactory.getLogger(Component.class);

@Override
public boolean deal(Message message) {
return message.getSleep();
}
}

@Component
@Order(1)
class PlayComponent implements ComponentConsumer<Message> {

private static final Logger logger = LoggerFactory.getLogger(Component.class);

@Override
public boolean deal(Message message) {
return message.getPlay();
}
}

@Service
public class ServiceImpl {

@Resource
List<ComponentConsumer> componentConsumerList;

public String dayOfThings(Message message) {
StringBuilder stringBuilder = new StringBuilder();
for (ComponentConsumer componentConsumer : componentConsumerList) {
if (componentConsumer.deal(message)) {
stringBuilder.append("校验通过");
} else {
stringBuilder.append("校验不通过");

}
}
return stringBuilder.toString();
}
}

通过访问 http://127.0.0.1:8080/test 就好了。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK