Springアノテーション「@Component
、@Service
、@Repository
、@Controller
」について、動きとして基本的同じであり、何れもアノテーションが付与されたクラスをSpringのDIコンテナにbeanとして登録します。使い分けとしては、Spring MVCにおいてコントローラー層のクラスには@Contoroller
、サービス層のクラスには@Serivice
、データ層のクラスには@Repository
、どれにも当てはまらない場合は@Component
を付けます。
@Controller
Spring MVCでコントローラー層のクラスに付与する。
Controller は、主に以下の役割を担う。
・画面遷移の制御
・ドメイン層の Service の呼出 (主処理を実行する)
@Controller
@RequestMapping("findProduct")
public class FindProductController {
@Inject
FindProductService findProductService;
@RequestMapping(value="list")
public String list(Model model) {
Collection<Product> products = findProductService.findAll();
model.addAttribute("products", products);
return "product/list";
}
}
@Service
Sping MVCでサービス層のクラス(ビジネスロジック等)に付与する。
Service は業務処理を提供する。
@Service
public class FindProductServiceImp implements FindProductService {
@Inject
FindProductRepository findProductRepository;
public Todo findAll() {
Collection<Product> products = findProductRepository.findAll();
if (products == null) {
// エラー処理
...
}
return products;
}
}
@Repository
Spring MVCでデータ層のクラス(DAO等のDBアクセスを行うクラス)に付与する。
@Repository
public class FindProductRepositoryImpl implements FindProductRepository {
private Collection<Product> products;
@Override
public Collection<Product> findAll() {
return products;
}
}
@Component
Spring MVCに限らず、SpringのDIコンテナにbeanとして登録したいクラスへ付与する。
@Component
public class checkComponentImp implements checkComponent{
@Override
public boolean check(BLogicParam param) {
...
}
}