Spring 2.5.x に移行すると、(2.0 からの@Repositoryの上に) より多くのステレオタイプ アノテーションが追加されることがわかりました: @Component、@Service、および@Controller。それらをどのように使用しますか?暗黙の Spring サポートに依存していますか、それともカスタム ステレオタイプ固有の機能/側面/機能を定義していますか? それとも、主に Bean のマーキング (コンパイル時、概念など) のためですか?
3 に答える
XML で Bean を配線する代わりに、2.5 の次のステレオタイプ アノテーションを Spring MVC アプリケーションで使用できます。
@Repository - DAO Bean 用 - データ ソースが利用できない場合に DataAccessException をスローできます。
@Service - ビジネス Bean 用 - は、いくつかのデフォルトの保持ポリシーが設定されているかなり単純な Bean です。
@Controller - サーブレット用 - ページ要求マッピングなどを設定できます。
さらに、一般的な 4 番目のアノテーション @Component が導入されました。すべての MVC アノテーションはこれを特殊化したものであり、@Component を単独で使用することもできますが、Spring MVC でこれを行うことにより、上位レベルのアノテーションに追加された将来の最適化/機能を利用することはありません。@Component を拡張して、独自のカスタム ステレオタイプを作成することもできます。
以下は、動作中の MVC アノテーションの簡単な例です... まず、データ アクセス オブジェクト:
@Repository
public class DatabaseDAO {
@Autowired
private SimpleJdbcTemplate jdbcTemplate;
public List<String> getAllRecords() {
return jdbcTemplate.queryForObject("select record from my_table", List.class);
}
}
サービス:
@Service
public class DataService {
@Autowired
private DatabaseDAO database;
public List<String> getDataAsList() {
List<String> out = database.getAllRecords();
out.add("Create New...");
return out;
}
}
そして最後に、コントローラー:
@Controller("/index.html")
public class IndexController {
@Autowired
private DataService dataService;
@RequestMapping(method = RequestMethod.GET)
public String doGet(ModelMap modelMap) {
modelMap.put(dataService.getDataAsList());
return "index";
}
}
この記事は、公式ドキュメントに加えて、ステレオタイプ アノテーションの幅広い概要を提供するのに非常に適していることがわかりました。
アノテーションはMVC固有ではなくなりました。詳細については、リファレンスドキュメントを参照してください。@Componentアノテーションまたはその仕様を使用する例は、監視をサポートするtcServerです。例については、こちらをご覧ください。この監視サポートは、ロード時のAspectJウィービングで追加されます。
要約すると、アノテーションは、Springコンテナーが開始された後の実行時、またはAspectJウィービングを使用したコンパイル/ロード時にさまざまな設定で使用できます。
このタグをxmlに追加することを忘れないでください
<context:component-scan base-package="com.example.beans"/>