この質問の短いリストは、Springの最も重要な概念を理解し、インタビューの準備に役立ちます。
コンポーネントスキャンの仕組みを理解していれば、Springも理解できます。
Spring Beanを記述する最初のステップは、アノテーション( @Component
、 @Component
、または@Component
)を追加すること@Repository
。
ただし、SpringはこれらのBeanの場所を知らない限り、これらのBeanについて何も知りません。 これらのBeanの検索場所をSpringが示しているのは、コンポーネントスキャンと呼ばれます。 @ComponentScanでは、スキャンするパッケージを指定します。
Springは、スキャンパッケージだけでなく、サブパッケージでもBeanを検索します。
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
@SpringBootApplicationは、Applicationクラスが存在するパッケージの自動スキャンを定義します
すべてが整い、コードは完全に指定されたパッケージまたはそのサブパッケージ内にあります。
ただし、必要なコンポーネントが別のパッケージにある場合は、さらに@ComponentScanアノテーションを使用する必要があります。ここで、スキャン用の追加パッケージをすべてリストします
@Component
と@ComponentScan
は異なる目的のためのものです
@Component
は、クラスをSpring Bean作成の候補としてマークします。
@ComponentScan
は、アノテーション@Component
またはその派生物でマークされたクラスをSpringが検索する場所を示します
Spring構成クラスで@Bean
、 @Bean
使用してカスタムロジックコンポーネントを定義します。
@Bean
、Spring構成クラスで使用されます。 ビンを直接作成するために使用されます。
@Component
、Springが管理するすべてのクラスで使用されます。 Springが@Component
持つクラスを@Component
、SpringはこのクラスをBean作成の候補として定義します。
これらはすべてSpring Beanを定義します。 ただし、それらの間にはまだ違いがあります。
@Component
汎用コンポーネント
@Repository
は、保存、取得、検索するように設計されたコンポーネントです。 通常、データベースの操作に使用されます。
@Service
いくつかのビジネスロジックのファサード
@Component
から派生したカスタムアノテーションは、Beanにカスタムロジックを追加できます。
たとえば、 @Repository
を使用して取得した@Repository
は、JDBC例外の処理も追加されます
はい もちろん。
@Component
がSpringコンポーネントのユニバーサルステレオタイプである場合、 @Component
は現在そのエイリアスです。 ただし、Springの公式ドキュメントでは、ビジネスロジックに@Service
を使用することを推奨しています。 このステレオタイプのフレームワークの将来のバージョンでは、追加のセマンティクスが追加され、そのBeanに追加のロジックが追加される可能性があります。
web.xml-Java EE互換のWebアプリケーションのメタデータと構成。 Webアプリケーション用のJava EE標準。
servlet.xmlは、Spring Framework固有の構成ファイルです。
@Service, @Component, @Autowired
などの要素によってコードベースが適切に記述されている場合、注釈を好む
ただし、構成に関しては、好みはありません。 この質問はチームにお任せします。
はい、もちろんです。
@Autowiredは、コンストラクター、セッター、またはその他のメソッドで使用できます。 Springがメソッドで@Autowiredを見つけると、SpringはBeanインスタンスの作成後にそのメソッドを自動的に呼び出します。 引数として、Springコンテキストから適切なオブジェクトが選択されます。
クロス機能-ロギング、パフォーマンス管理、セキュリティなど、いくつかの異なるレベルで必要になる可能性のある機能
AOPは、この問題の実装へのアプローチの1つです。
IOC-管理の反転。 手動で依存関係を注入する代わりに、フレームワークがこれを担当します。
ApplicationContext-IOCスプリングの実装。
Bean FactoryはIOCコンテナの基本バージョンです
Application Contextには、エンタープライズアプリケーション開発に通常必要な追加機能も含まれています。
classPathXmlApplicationContext-Springコンテキストをxmlで初期化する場合
annotationConfigApplicationContext-Java構成クラスを使用してSpringコンテキストを初期化する場合
@Around
アノテーションでマークされたメソッドは、(メソッド)がjoinpoint.proceed()から受け取った値を返す必要があります。
@Around("trackTimeAnnotation()") public Object around(ProceedingJoinPoint joinPoint) throws Throwable{ long startTime = System.currentTimeMillis(); Object retVal = joinPoint.proceed(); long timeTaken = System.currentTimeMillis() - startTime; logger.info("Time taken by {} is equal to {}",joinPoint, timeTaken); return retVal; }
ほとんどの場合、他のBeanよりも好むBeanがある場合は、 @Primary
を使用し、非標準のスクリプトには@Qualifier
を使用します。
すべてのBeanの優先度が同じ場合、常に@Qualifier
使用し@Qualifier
プログラムの実行中にビンを選択する必要がある場合、これらの注釈は機能しません。 構成クラスでメソッドを作成し、 @Bean
アノテーションでマークし、必要なBeanを返す必要があります。
私の意見では、これはFunctional Web Framework、Kotlin、およびリアクティブプログラミングサポートです。
WebコンテナとEJBコンテナは、Tomcat、Websphere、Weblogicなどのアプリケーション/ Webサーバーの一部です。 追加の機能を追加します。 Java EEはWebアプリケーションのコントラクトを定義します;これらのコンテナはこれらのコントラクトの実装です。
Springコンテナは、javaで作成するアプリケーションの一部にすることができます。 Springは、Webコンテナ、EJBコンテナ、またはそれらなしでも動作します。
例を考えてみましょう:
interface GreetingService { public String sayHello(); }
そして2つのコンポーネント
@Component(value="real") class RealGreetingService implements GreetingService { public String sayHello() { return "I'm real"; } } @Component(value="mock") class MockGreetingService implements GreetingService { public String sayHello() { return "I'm mock"; } }
次に、application.propertiesでプロパティを追加します
application.greeting:本物
このソリューションを使用します。
@RestController public class WelcomeController { @Resource(name="${application.greeting}") private GreeterService service1; }
Spring 5.0およびSpring Boot 2.0は、Java 8以降をサポートしています。
@RestController = @Controller + @ResponseBody
@RestController
は、タグ付きクラスをSpring Beanに変換します。 このビンは、Jacksonメッセージコンバーターを使用して、着信/発信データを変換します。 通常、ターゲットデータはjsonまたはxmlで表示されます。
ResponseEntityは、応答ステータスを追加して応答をカスタマイズする場合にのみ必要です。 その他の場合はすべて、@ ResponseBodyを使用します。
@GetMapping(value=”/resource”) @ResponseBody public Resource sayHello() { return resource; } @PostMapping(value=”/resource”) public ResponseEntity createResource() { …. return ResponseEntity.created(resource).build(); }
使用できる標準HTTP応答ステータスコード。
200-成功
201-作成済み
404-リソースが見つかりません
400-悪いリクエスト
401-不正
500-サーバーエラー
@ResponseBodyの場合、すべてが正常な場合のステータス状態はSUCCESS(200)、エラーが発生した場合のサーバーエラー(500)のみです。
何かを作成し、ステータスCREATED(201)を送信するとします。 この場合、ResponseEntityを使用します。
すべてが概念的に単純であり、サーブレットフィルターはHTTPServletのみをインターセプトできます。 リスナーは特定のイベントをインターセプトできます。 他に関係のないイベントをインターセプトする方法は?
フィルターとインターセプターは本質的に同じことを行います:イベントをインターセプトし、前後に何かをします。
Java EEはフィルターという用語を使用し、Springはそれらをインターセプターと呼びます。
これは、AOPを最大限に活用して、あらゆるオブジェクトの呼び出しをインターセプトできるようにする場所です
モデル-インターフェース、ModelMapの実装..
ModelAndViewは、ModelMapやViewなどのペアのコンテナーです。
通常、ModelAndViewを使用します。 ただし、ModelMapで必要な属性を設定し、Viewという名前をコントローラーメソッドから通常の文字列として返す方法もあります。
addAttributeメソッドは、ハッシュマップの基本構造の操作から私たちを分離します。 本質的に、addAttributeはラッパーオーバープットであり、nullの追加チェックが行われます。 addAttributeメソッドは、putとは異なり、modelmapを返します。
model.addAttribute(「attribute1」、「value1」)。addAttribute(「attribute2」、「value2」);
たとえば、HTMLページから何らかの値を取得してデータベースに保存する場合、これが必要になることがあります。 これを行うには、この値をSpringコントローラーに移動する必要があります。
Spring MVCフォームタグを使用すると、SpringはHTMLページの変数をSpring Beanに自動的に関連付けます。
これを使用しなければならない場合、Spring MVC Form公式タグの公式ドキュメントを必ずご覧ください。
Hibernate Validatorは、決してデータベースに関連付けられていません。 これは単なる検証ライブラリです。
Hibernate Validatorバージョン5.xは、Bean Validation 1.1のリファレンス実装です
また、 http://beanvalidation.org/2.0を見ると、Hibernate Validatorのみが認定されています。
静的リソースの場所はカスタマイズできます。 Spring Bootのドキュメントでは、/ static、/ public、/ resources、/ META-INF / resourcesの使用を推奨しています。
GETリクエストの場合、送信されたパラメーターはurlの一部であり、GETリクエストが通過するすべてのルーターはそれらを読み取ることができます。
POST要求の場合、送信されたパラメーターは要求本文の一部です。 HTTPを使用する場合、リクエストの本文は暗号化されます。 したがって、POST要求を使用する方が安全です。
例:
http://localhost:8080/login?name=Ranga&name=Ravi&name=Sathish
はい、コントローラーメソッドの配列を使用してすべての値を受け入れることができます
public String method(@RequestParam(value="name") String[] names){ }
翻訳の手助けをしてくれたjabr jd2050のユーザーに感謝します。