У меня есть общий вопрос по кодированию для загрузки Spring.Представьте, что у вас есть контроллер, когда пользователь заходит на определенную страницу, мы читаем некоторые данные из БД, мы делаем некоторую бизнес-логику с этими данными и в зависимости от бизнес-логики мы переходим на другую страницу.Есть 3 способа, которыми я могу запрограммировать это.Вопрос в том, какой метод лучше и почему.Таким образом, я пытаюсь понять различные варианты.Возможно, есть и другие варианты, поэтому, если у вас есть лучшее предложение, пожалуйста, дайте мне знать.Другой вопрос, вы всегда создаете bean / компоненты в Spring или иногда программируете класс Java способом?
Вариант 1: Статический метод Я читаю данные из БД в классе контроллера, в другом классе я делаю некоторую бизнес-логику в статическом методе и возвращаю новую строку.Это выглядит следующим образом:
Класс контроллера:
@Controller
public class TestController {
private final RouteRepository routeRepository;
@Autowired
public TestController (RouteRepository routeRepository) {
this.routeRepository = routeRepository;
}
@GetMapping("/test")
public String getTestController() {
List<Route> route= routeRepository.findAll();
String total= Test.testMethod(route);
return total;
}
}
Класс бизнес-логики:
public class Test {
public static String testMethod(List<Route> route) {
// do some business logic
return "index";
}
}
Вариант 2: Я читаю данные в классе @Service, вВ том же классе я занимаюсь бизнес-логикой.В моем классе контроллера я автоматически подключаю класс обслуживания и вызываю метод в классе @Service:
Класс контроллера:
@Controller
public class TestController {
private final Test test;
@Autowired
public TestController (Test test) {
this.test = test;
}
@GetMapping("/test")
public String getTestController() {
String total= test.testMethod();
return total;
}
}
Класс бизнес-логики:
@Service
public class Test {
private final RouteRepository routeRepository;
@Autowired
public Test (RouteRepository routeRepository) {
this.routeRepository = routeRepository;
}
public String testMethod() {
List<Route> route= routeRepository.findAll();
// do some business logic
return "index";
}
}
Option3: или я делаю то же, что и option1, но с @ Bean
Класс контроллера:
@Controller
public class TestController {
ApplicationContext context = new AnnotationConfigApplicationContext(ConfigAll.class);
Test test = context.getBean(Test.class);
private final RouteRepository routeRepository;
@Autowired
public TestController (RouteRepository routeRepository) {
this.routeRepository = routeRepository;
}
@GetMapping("/test")
public String getTestController() {
List<Route> routes = routeRepository.findAll();
String total= test.testMethod(routes);
return total;
}
}
Бизнес-логика:
@Service
public class Test {
public String testMethod(List<Route> routes) {
// do some business logic
return "index";
}
}
Класс конфигурации:
@Configuration
public class ConfigAll {
@Bean
public Test getAddress() {
return new Test();
}
}