考虑以下两个选项:
选项 #1:在控制器中自动装配所需的服务
@Controller
@RequestMapping(value="/foo")
public class FooController {
@Autowired
private FooService fooService;
@Autowired
private BarService barService;
@Autowired
private BazService bazService;
@RequestMapping(method=RequestMethod.GET)
public String getFoo(...) {
Foo foo = fooService.getFooInstance(...);
List<Foo> foos = fooService.getFooList(foo);
List<Bar> bars = barService.getBarList(foo);
Baz baz = bazService.getBaz(foo);
...
return "view/foo/index.jsp";
}
}
选项 #2:在特定服务中为 UoW 自动装配依赖服务
@Controller
@RequestMapping(value="/foo")
public class FooController {
@Autowired
private FooService fooService;
@RequestMapping(method=RequestMethod.GET)
public String getFoo(...) {
Foo foo = fooService.getFooInstance(...);
FooDTO fooInfo = fooService.getFooAllInformation(foo);
List<Foo> foos = fooInfo.getFoos();
List<Bar> bars = fooInfo.getBars();
Baz baz = fooInfo.getBaz();
...
return "view/foo/index.jsp";
}
}
@Service
public class FooServiceImpl implements FooService {
@Autowired
private FooRepository fooRepository;
@Autowired
private BarService barService;
@Autowired
private BazService bazService;
...
@Override
@Transactional
public FooDTO getFooAllInformation(Foo foo) {
List<Foo> foos = getFooList(foo);
List<Bar> bars = barService.getBarList(foo);
Baz baz = bazService.getBaz(foo);
...
}
}
好吧,目前我正在使用选项#1,一切正常。但我想知道这种方法是否足够好。它们中的任何一个比另一个有任何显着优势吗?我应该提到我知道服务@Transactional
的INSERT
一部分(我在这里省略了)。但是仅仅读取数据呢。