Spring常用注記の使い方と役割理解1
9731 ワード
目次
一、実例
@Controller
@RequestMaping
@Service
@Resource
@Autowired
@Repository
@Component
springを使用する場合、これらの寸法は必要不可欠です.今日はそれぞれの役割と使い方をまとめてみましょう.
一、実例制御層 service層 Dao層 Daoレイヤ実装クラス テスト
入力:古い運転手が運転できる.
注意:以上が最も簡単な3階層アーキテクチャです.Tomcatの下にパブリッシュされると、サーバは@Controller寸法に従ってSpring Beanファクトリに制御層インスタンスを自動的に注入し、@RequestMappingの上のパスを参照すると、一連の寸法でDao階層にアクセスできます.ここでテストは配布されていないため、手動注入を直接使用します(CarTestクラスの上の注釈を参照する方法、またはBeanFactoryを直接使用する方法について).
@Controller
使用法:クラスにタグを付ける役割:このbean(クラス)はMVCモデルの制御層であることを注釈するために使用され、配布プロセッサにクラスを認識させ、springのauto-scanによって管理に組み込まれる.一般的に、このタグクラスの中の方法に@RequestMaping("...")を加えられる.ブラウザに直接呼び出され、データ論理処理を行うことができます.例の説明:ブラウザでActionクラスのcarRunメソッド(ローカル)127.0.0.1:8080/car/carRunにアクセスする場合
@RequestMaping
使用法:1.@Controllerで表記するクラスにタグを付ける.@Controllerタグ付けされたクラスにタグ付けされるメソッド上の役割:使用法1,この被寸法クラスの下のすべてのメソッドを表す親寸法(すべての用法2「継承」用法1と理解できる)@RequestMapingには6つの属性value、method、consumes、produces、params、headers valueがある:ブラウザ要求のアドレスを指定する;method:要求を指すmethodタイプ、GET、POST、PUT、DELETEなど;
valueのuri値は次の3つです.
A)通常の具体値として指定することができる.
B)ある変数を含む値(URI Template Patterns with Path Variables)として指定することができる.
C)正規表現を含む値(URI Template Patterns with Regular Expressions)のクラスとして指定できます.
example B)
example C)
consumes:アプリケーション/json、text/htmlなどの処理要求のコミットコンテンツタイプを指定します.
メソッドはrequest Content-Typeが「アプリケーション/json」タイプのリクエストのみを処理します.
produces:返されるコンテンツタイプを指定し、requestリクエストヘッダの(Accept)タイプに指定されたタイプが含まれている場合にのみ返されます.
メソッドは、requestリクエストのAcceptヘッダに「アプリケーション/json」が含まれているリクエストのみを処理し、返されるコンテンツタイプがアプリケーション/jsonであることを示す.
params:requestにメソッドを処理するためにいくつかのパラメータ値が含まれている必要があることを指定します.
処理要求に「myParam」という名前の「myValue」という値の要求のみが含まれている.
headers:リクエストを処理するにはrequestに指定したheader値を含める必要があることを指定します.
例の説明:ブラウザでActionクラスのcarRunメソッドにアクセスするには、ローカルドメイン名+ポート番号+このマークアップで定義されたvalue値(127.0.0.1:8080/car/carRun)@RequestMapingでよく使用されるvalueとmethodを覚えておくだけで、より詳細な説明--)リンク
@Service
使用法:サービス層コンポーネント(Service層)の表示に使用します.ビジネス層コンポーネントに表示すると、beanが定義され、表示されたコンポーネント名に基づいて小文字のbeanが自動的にインスタンス化されます.例の説明:IocCarServiceクラスはbeanとしてマークされ、bean名はiocCarServiceであり、このクラスはspringによって管理され、使用される
@Resource
使用法:フィールドまたはsetterメソッドに寸法を付け、@ResourceはデフォルトでByNameで自動アセンブリされます.Beanを自動的にアセンブリし、名前付きリソースの依存注入をアクティブにします.@Resourceプロパティnameは、自動アセンブリBeanの名前インスタンス解釈を定義できます.IocCarServiceクラスでIocCarDaoのインプリメンテーションクラスは@RepositoryにSpringによって管理されているBeanとしてマークされています.この場合、それを使用する必要がある場合は、プロパティ名に@Resourceユーザーの自動アセンブリをマークするだけでいいです.状況1:以下のコードを加えると、印刷出力はやはり:ベテラン運転手だけが運転できる.
これはおかしいですね.2つの実装クラスです.プログラムはどうして私がどれを呼び出すか知っていますか.CarServiceクラスでは私たちの属性名(private IocCarDao iIocCarDaoImpl;)はiIocCarDaoImplであり、加入したばかりのiIocCarDaoImplXXXではないので印刷されたのはベテランドライバーのみ運転できます.
ケース2:CarServicerクラスで属性名を変更した場合(private IocCarDao iIocCarDaoImplYY;)エラーが発生します(org.springframework.beans.factory.NoUniqueBeanDefinitionException:No qualifying bean of type[com.ulewo.ioc.IocCarDaoImplYY]is defined:expected single matching bean but found 2:iIocCarDaoImpl,iIocCarDaoImplXXX)は、プログラムが2つのBeanを見つけたことを意味し、iIocCarDaoImplとiIocCarDaoImplXXXという名前ですが、私たちのiIocCarDaoImplYYがないので、報告が間違っています.この場合、ソリューションはプロパティ名を変更したり、@Resource注記で正しい名前を定義したりすることができます.
このとき、古い運転手でなくても運転を学ぶことができます.
@Autowired
この注記は@Resourceの使い方と役割とほぼ一致しています.相違点:1.@ResourceはJ 2 EE、@AutowiredはSpring 2.@Autowiredはタイプ(ByType)による自動組み立ての3.@Autowiredにはname属性がありません.名前でアセンブリする場合は@Qualifierと組み合わせて使用する必要があります.
@Repository
使用法:ユーザー寸法データアクセス層コンポーネント(Daoレイヤ)機能:Daoアクセスを実装する.クラスをBeanと識別し、マークアップされたクラスから放出されたデータアクセス異常をSpringのデータアクセス異常タイプにカプセル化する.例の説明:Daoレイヤ実装クラスIocCarDaoImplはSpringによってbeanとしてロードされ管理され、bean名はiIocCarDaoImplである.同時にマークアップされたクラスから放出された数をアクセス例外によってSpringにカプセル化されたデータアクセス例外タイプ.Bean名をカスタマイズする必要がある場合は、注記のvalueプロパティ値を変更するだけです.
@Component
使用法:コンポーネントを指します.コンポーネントが分類しにくい場合は、この注釈を使用して寸法を付けることができます.役割:前の@Service、@Repository、@Controllerと同様に、@Componentよりも大きく細分化されています.
まとめ:
@Repository、@Service、@Controller注記では、ラベル付けされたコンポーネントをBeanとしてSpringして管理し、Beanの名前はプロパティによってカスタマイズできます@Repositoryはデータ・アクセス・レイヤとして使用され、@ServiceはServiceレイヤとして使用されます
@Resource、@Autowired注記は、すでにSpirngによって管理されているBeanを使用します.@Resourceの使い方はByNameです.@Autowiredの使用方法はByTypeで、@Qualifierの使用に合わせてByNameに変更できます.呼び出したBean名もカスタマイズできます
一、実例
@Controller
@RequestMaping
@Service
@Resource
@Autowired
@Repository
@Component
springを使用する場合、これらの寸法は必要不可欠です.今日はそれぞれの役割と使い方をまとめてみましょう.
一、実例
@Controller
@RequestMapping(value="/car")
public class Action{
@Autowired
private IocCarSrivice iocCarSrivice ;
@RequestMapping(value="/carRun")
public void carRun(){
iocCarSrivice.run();
}
}
@Service
public class IocCarService{
@Resource
private IIocCarDao iIocCarDaoImpl;
public void carRun(){
iIocCarDaoImpl.run();
}
}
public interface IIocCarDao{
void run();
}
@Repository
public class IIocCarDaoImpl implements IIocCarDao{
@Override
public void run(){
System.out.println(" 。");
}
}
package CarTest;
import java.util.Date;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.kq.domain.TransPayLog;
import com.kq.service.TransPayLogService;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class CarTest{
@Autowired
private IocCarService iocCarService;
@Test
public void Test3_7(){
iocCarService.carRun();
}
}
入力:古い運転手が運転できる.
注意:以上が最も簡単な3階層アーキテクチャです.Tomcatの下にパブリッシュされると、サーバは@Controller寸法に従ってSpring Beanファクトリに制御層インスタンスを自動的に注入し、@RequestMappingの上のパスを参照すると、一連の寸法でDao階層にアクセスできます.ここでテストは配布されていないため、手動注入を直接使用します(CarTestクラスの上の注釈を参照する方法、またはBeanFactoryを直接使用する方法について).
@Controller
使用法:クラスにタグを付ける役割:このbean(クラス)はMVCモデルの制御層であることを注釈するために使用され、配布プロセッサにクラスを認識させ、springのauto-scanによって管理に組み込まれる.一般的に、このタグクラスの中の方法に@RequestMaping("...")を加えられる.ブラウザに直接呼び出され、データ論理処理を行うことができます.例の説明:ブラウザでActionクラスのcarRunメソッド(ローカル)127.0.0.1:8080/car/carRunにアクセスする場合
@RequestMaping
使用法:1.@Controllerで表記するクラスにタグを付ける.@Controllerタグ付けされたクラスにタグ付けされるメソッド上の役割:使用法1,この被寸法クラスの下のすべてのメソッドを表す親寸法(すべての用法2「継承」用法1と理解できる)@RequestMapingには6つの属性value、method、consumes、produces、params、headers valueがある:ブラウザ要求のアドレスを指定する;method:要求を指すmethodタイプ、GET、POST、PUT、DELETEなど;
@Controller
@RequestMapping("/appointments")
public class AppointmentsController {
private AppointmentBook appointmentBook;
@Autowired
public AppointmentsController(AppointmentBook appointmentBook) {
this.appointmentBook = appointmentBook;
}
@RequestMapping(method = RequestMethod.GET)
public Map get() {
return appointmentBook.getAppointmentsForToday();
}
@RequestMapping(value="/{day}", method = RequestMethod.GET)
public Map getForDay(@PathVariable @DateTimeFormat(iso=ISO.DATE) Date day, Model model) {
return appointmentBook.getAppointmentsForDay(day);
}
@RequestMapping(value="/new", method = RequestMethod.GET)
public AppointmentForm getNewForm() {
return new AppointmentForm();
}
@RequestMapping(method = RequestMethod.POST)
public String add(@Valid AppointmentForm appointment, BindingResult result) {
if (result.hasErrors()) {
return "appointments/new";
}
appointmentBook.addAppointment(appointment);
return "redirect:/appointments";
}
}
valueのuri値は次の3つです.
A)通常の具体値として指定することができる.
B)ある変数を含む値(URI Template Patterns with Path Variables)として指定することができる.
C)正規表現を含む値(URI Template Patterns with Regular Expressions)のクラスとして指定できます.
example B)
@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)
public String findOwner(@PathVariable String ownerId, Model model) {
Owner owner = ownerService.findOwner(ownerId);
model.addAttribute("owner", owner);
return "displayOwner";
}
example C)
@RequestMapping("/spring-web/{symbolicName:[a-z-]+}-{version:\d\.\d\.\d}.{extension:\.[a-z]}")
public void handle(@PathVariable String version, @PathVariable String extension) {
// ...
}
}
consumes:アプリケーション/json、text/htmlなどの処理要求のコミットコンテンツタイプを指定します.
@Controller
@RequestMapping(value = "/pets", method = RequestMethod.POST, consumes="application/json")
public void addPet(@RequestBody Pet pet, Model model) {
// implementation omitted
}
メソッドはrequest Content-Typeが「アプリケーション/json」タイプのリクエストのみを処理します.
produces:返されるコンテンツタイプを指定し、requestリクエストヘッダの(Accept)タイプに指定されたタイプが含まれている場合にのみ返されます.
@Controller
@RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, produces="application/json")
@ResponseBody
public Pet getPet(@PathVariable String petId, Model model) {
// implementation omitted
}
メソッドは、requestリクエストのAcceptヘッダに「アプリケーション/json」が含まれているリクエストのみを処理し、返されるコンテンツタイプがアプリケーション/jsonであることを示す.
params:requestにメソッドを処理するためにいくつかのパラメータ値が含まれている必要があることを指定します.
@Controller
@RequestMapping("/owners/{ownerId}")
public class RelativePathUriTemplateController {
@RequestMapping(value = "/pets/{petId}", method = RequestMethod.GET, params="myParam=myValue")
public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {
// implementation omitted
}
}
処理要求に「myParam」という名前の「myValue」という値の要求のみが含まれている.
headers:リクエストを処理するにはrequestに指定したheader値を含める必要があることを指定します.
@Controller
@RequestMapping("/owners/{ownerId}")
public class RelativePathUriTemplateController {
@RequestMapping(value = "/pets", method = RequestMethod.GET, headers="Referer=http://www.ifeng.com/")
public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {
// implementation omitted
}
}
例の説明:ブラウザでActionクラスのcarRunメソッドにアクセスするには、ローカルドメイン名+ポート番号+このマークアップで定義されたvalue値(127.0.0.1:8080/car/carRun)@RequestMapingでよく使用されるvalueとmethodを覚えておくだけで、より詳細な説明--)リンク
@Service
使用法:サービス層コンポーネント(Service層)の表示に使用します.ビジネス層コンポーネントに表示すると、beanが定義され、表示されたコンポーネント名に基づいて小文字のbeanが自動的にインスタンス化されます.例の説明:IocCarServiceクラスはbeanとしてマークされ、bean名はiocCarServiceであり、このクラスはspringによって管理され、使用される
@Resource
使用法:フィールドまたはsetterメソッドに寸法を付け、@ResourceはデフォルトでByNameで自動アセンブリされます.Beanを自動的にアセンブリし、名前付きリソースの依存注入をアクティブにします.@Resourceプロパティnameは、自動アセンブリBeanの名前インスタンス解釈を定義できます.IocCarServiceクラスでIocCarDaoのインプリメンテーションクラスは@RepositoryにSpringによって管理されているBeanとしてマークされています.この場合、それを使用する必要がある場合は、プロパティ名に@Resourceユーザーの自動アセンブリをマークするだけでいいです.状況1:以下のコードを加えると、印刷出力はやはり:ベテラン運転手だけが運転できる.
@Repository
public class IIocCarDaoImplXXX implements IIocCarDao{
@Override
public void run(){
System.out.println(" 。");
}
}
これはおかしいですね.2つの実装クラスです.プログラムはどうして私がどれを呼び出すか知っていますか.CarServiceクラスでは私たちの属性名(private IocCarDao iIocCarDaoImpl;)はiIocCarDaoImplであり、加入したばかりのiIocCarDaoImplXXXではないので印刷されたのはベテランドライバーのみ運転できます.
ケース2:CarServicerクラスで属性名を変更した場合(private IocCarDao iIocCarDaoImplYY;)エラーが発生します(org.springframework.beans.factory.NoUniqueBeanDefinitionException:No qualifying bean of type[com.ulewo.ioc.IocCarDaoImplYY]is defined:expected single matching bean but found 2:iIocCarDaoImpl,iIocCarDaoImplXXX)は、プログラムが2つのBeanを見つけたことを意味し、iIocCarDaoImplとiIocCarDaoImplXXXという名前ですが、私たちのiIocCarDaoImplYYがないので、報告が間違っています.この場合、ソリューションはプロパティ名を変更したり、@Resource注記で正しい名前を定義したりすることができます.
@Service
public class IocCarService{
@Resource(name="iIocCarDaoImplYYY")
private IIocCarDao iIocCarDaoImpl;
public void carRun(){
iIocCarDaoImpl.run();
}
}
このとき、古い運転手でなくても運転を学ぶことができます.
@Autowired
この注記は@Resourceの使い方と役割とほぼ一致しています.相違点:1.@ResourceはJ 2 EE、@AutowiredはSpring 2.@Autowiredはタイプ(ByType)による自動組み立ての3.@Autowiredにはname属性がありません.名前でアセンブリする場合は@Qualifierと組み合わせて使用する必要があります.
@Service
public class IocCarService{
@Resource(name="iIocCarDaoImplYYY")
private IIocCarDao iIocCarDaoImpl;
public void carRun(){
iIocCarDaoImpl.run();
}
}
//
@Service
public class IocCarService{
@Autowired
@Qualifie("iIocCarDaoImplYYY")
private IIocCarDao iIocCarDaoImpl;
public void carRun(){
iIocCarDaoImpl.run();
}
}
@Repository
使用法:ユーザー寸法データアクセス層コンポーネント(Daoレイヤ)機能:Daoアクセスを実装する.クラスをBeanと識別し、マークアップされたクラスから放出されたデータアクセス異常をSpringのデータアクセス異常タイプにカプセル化する.例の説明:Daoレイヤ実装クラスIocCarDaoImplはSpringによってbeanとしてロードされ管理され、bean名はiIocCarDaoImplである.同時にマークアップされたクラスから放出された数をアクセス例外によってSpringにカプセル化されたデータアクセス例外タイプ.Bean名をカスタマイズする必要がある場合は、注記のvalueプロパティ値を変更するだけです.
@Repository(value="IIocCarDaoImplZZZ")
public class IIocCarDaoImpl implements IIocCarDao{
@Override
public void run(){
System.out.println(" 。");
}
}
@Component
使用法:コンポーネントを指します.コンポーネントが分類しにくい場合は、この注釈を使用して寸法を付けることができます.役割:前の@Service、@Repository、@Controllerと同様に、@Componentよりも大きく細分化されています.
まとめ:
@Repository、@Service、@Controller注記では、ラベル付けされたコンポーネントをBeanとしてSpringして管理し、Beanの名前はプロパティによってカスタマイズできます@Repositoryはデータ・アクセス・レイヤとして使用され、@ServiceはServiceレイヤとして使用されます
@Resource、@Autowired注記は、すでにSpirngによって管理されているBeanを使用します.@Resourceの使い方はByNameです.@Autowiredの使用方法はByTypeで、@Qualifierの使用に合わせてByNameに変更できます.呼び出したBean名もカスタマイズできます