目次
前に書きます:
ケース: @Component と @Scope の使用分析:
案例:@ImportResource和@Value用法分析:
案例:@Bean和@Scope用法分析:
ホームページ Java &#&チュートリアル Spring Frameworkのアノテーションの使用コード例を詳しく解説

Spring Frameworkのアノテーションの使用コード例を詳しく解説

Mar 18, 2017 am 10:36 AM

前に書きます:

ご存知のとおり、JavaEE 開発フレームワークフレームワーク では、Spring フレームワークが最もよく使用されており、フレームワーク内でのアノテーションの位置付けがますます明確になってきています。冗談を言ってみましょう。1 つのアノテーションで解決できる場合は、大量の設定とコードを使用しても決して解決できません。解決できない場合は、2 つのアノテーションを使用してください (ちょっと待ってください。スプレーしないでください)。 .)

1. @Component は Spring であり、任意の Bean にアノテーションを付けることができるように定義された一般的なアノテーションです。

2.@Scope は Bean のスコープを定義します。デフォルトのスコープは「singleton」です。さらに、プロトタイプ、リクエスト、セッション、およびグローバル セッションがあります。

ケース: @Component と @Scope の使用分析:

BeanAnnotation クラス:

@Scope
@Component
public class BeanAnnotation {

    public void say(String arg) {
        System.out.println("BeanAnnotation : " + arg);
    }

    public void myHashCode() {
        System.out.println("BeanAnnotation : " + this.hashCode());
    }

}
ログイン後にコピー

junit4 テストクラス→TestBeanAnnotation クラス:

@RunWith(BlockJUnit4ClassRunner.class)
public class TestBeanAnnotation extends UnitTestBase {

    public TestBeanAnnotation() {
        super("classpath*:spring-beanannotation.xml");
    }

    @Test
    public void testSay() {
        BeanAnnotation bean = super.getBean("beanAnnotation");
        bean.say("This is test.");
    }

    @Test
    public void testScpoe() {
        BeanAnnotation bean = super.getBean("beanAnnotation");
        bean.myHashCode();
        bean = super.getBean("beanAnnotation");
        bean.myHashCode();
    }

}
ログイン後にコピー

Spring設定ファイル→spring-beanannotation.xml:

りー

最初に Spring 構成ファイルを分析しましょう。 base-package="com.beanannotation" は、このパッケージ名のアノテーションのみを処理することを示しています。 base-package="com.beanannotation"说明我们只处理这个包名下面的注解。

然后分析BeanAnnotation类,有一个say的方法。假设我们不清楚这是一个什么类型(注:Service或者DAO)的类,我们可以用一个通用的注解@Component。

最后分析TestBeanAnnotation类,testSay方法里super.getBean("beanAnnotation")是从IOC的容器中取到这个bean,并调用bean的say方法。

提出问题的时间到了,当我们super.getBean的时候是通过bean的id从IOC容器中获取的,那么这个id是什么呢?因为在我们添加@Component到BeanAnnotation类上的时候,默认的id为beanAnnotation。如果指定了@Component的名称,譬如指定为@Component(”bean”)次に、BeanAnnotation クラスを分析すると、say メソッドがあります。これがどのようなタイプのクラス (注: Service または DAO) かわからないと仮定すると、一般的な注釈 @Component を使用できます。

最後に TestBeanAnnotation クラスを分析します。testSay メソッドで、super.getBean("beanAnnotation") が IOC コンテナから Bean を取得し、Bean の Say メソッドを呼び出します。

ここで質問します。super.getBean を使用すると、Bean の ID を通じて IOC コンテナから取得されます。 @Component を BeanAnnotation クラスに追加すると、デフォルト ID は beanAnnotation になるためです。 @Component の名前を指定した場合、例えば @Component("bean") と指定した場合、単体テスト時に super.getBean で取得した ID と照合してテストする必要があります。成功。

ここでは、分析用に @Scope アノテーションを分離します。 TestBeanAnnotation クラスには testScpoe メソッドがあります。 BeanAnnotation クラスには myHashCode メソッドがあります。なぜ this.hashCode() を使用するのか、混乱しているかもしれません。 @Scope は Bean のスコープを指定するため、テスト クラスの結果が正確かつ明確であることを保証するために、ハッシュ コード値を使用してそれらが同じ

オブジェクト
であるかどうかを判断します。

3.@Repository、@Service、@Controller は、よりターゲットを絞ったアノテーションです。

追記: ここで、これら 3 つのアノテーションは @Component によって定義されたアノテーションに基づいていることを理解する必要があります:

①、@Repository は通常、DAO クラスにアノテーションを付けるために使用されます。これは、私たちがよく永続層と呼ぶものです。 ②. @Service は通常、サービス層である Service クラスにアノテーションを付けるために使用されます。

③、@Controllerは通常、コントロール層(

MVC

)であるControllerクラスで使用されます。

4. @Autowired は、セッター メソッド、コンストラクター、またはメンバー変数で使用でき、Spring Bean の自動アセンブリを実行できる「従来の」セッター メソッドとして理解されます。

ケース: @Autowired 使用分析 1:

Spring 構成ファイル → spring-beanannotation.xml:

SimpleMovie

List

er クラス:

<context:component-scan base-package="com.beanannotation"></context:component-scan>
ログイン後にコピー
ログイン後にコピー
適切なものが見つからない場合、デフォルトで Beanこれを回避するには、この set メソッドに @Autowired アノテーションを付け、required=false をマークします。ただし、これは必要ありません。movieFinder のインスタンスが見つからない場合、例外はスローされません。この場合、movieFinder が null

であることが判明します。が null の場合、null ポインタ例外が報告されます。

各クラスが多くのコンストラクターを持つことができることはわかっていますが、@Autowired を使用する場合、required=true としてマークできるコンストラクターは 1 つだけです (注: required のデフォルト値は false です)。 。

ケース: @Autowired の使用分析 2:

BeanImplOne クラス:

public class SimpleMovieLister {

    private MovieFinder movieFinder;

    @Autowired(required=false)
    public void setMovieFinder(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    }

}
ログイン後にコピー
BeanImplTwo クラス:

@Order
@Component
public class BeanImplOne implements BeanInterface {

}
ログイン後にコピー
BeanInterface クラス:

@Order
@Component
public class BeanImplTwo implements BeanInterface {

}
ログイン後にコピー
BeanInvoker クラス:

public interface BeanInterface {

}
ログイン後にコピー

テストクラス TestInjection:

@RunWith(BlockJUnit4ClassRunner.class)
public class TestInjection extends UnitTestBase {

    public TestInjection() {
        super("classpath:spring-beanannotation.xml");
    }

    @Test
    public void testMultiBean() {
        BeanInvoker invoker = super.getBean("beanInvoker");
        invoker.say();
    }

}
ログイン後にコピー

首先,我们清楚BeanImplOne类和BeanImplTwo类是实现了BeanInterface接口的,在BeanInvoker类里面我们定义了list和map,我们通过@Autowired注解把BeanImplOne类和BeanImplTwo类注解进入其中。那么怎么证实是@Autowired注解把这两个类注入到list或者map中的呢?那么请看if循环语句和foreach循环打印,通过这个逻辑判断,如果能够打印出BeanImplOne类和BeanImplTwo类的路径名,就说明这样是可以的。如果有些小伙伴可能不信,那么可以试着不使用@Autowired注解,看结果怎么样。

测试类没有什么好说的,各位小伙伴有没有注意到@Order注解呢?这里需要解释的就是,如果在@Order注解里面输入执行的数字,比如1或者2,那么打印出来的路径名就会按顺序,也就是说通过指定@Order注解的内容可以实现优先级的功能。

5.@ImportResource注解引入一个资源,对应一个xml文件

6.@Value注解从资源文件中,取出它的key并赋值给当前类的成员变量

案例:@ImportResource和@Value用法分析:

MyDriverManager类:

public class MyDriverManager {

    public MyDriverManager(String url, String userName, String password) {
        System.out.println("url : " + url);
        System.out.println("userName: " + userName);
        System.out.println("password: " + password);
    }

}
ログイン後にコピー

config.xml:

<context:property-placeholder location="classpath:/config.properties"/>
ログイン後にコピー

StoreConfig类:

@Configuration
@ImportResource("classpath:config.xml")
public class StoreConfig {

    @Value("${jdbc.url}")
    private String url;

    @Value("${jdbc.username}")
    private String username;

    @Value("${jdbc.password}")
    private String password;

    @Bean
    public MyDriverManager myDriverManager() {
        return new MyDriverManager(url, username, password);
    }
ログイン後にコピー

这个案例我们使用注解配置jdbc数据库的连接,首先创建一个内含构造器的MyDriverManager类,然后配置config.xml里面的资源文件路径,以便@ImportResource注解获取,最后配置StoreConfig类。(注意url、username、password也必须要和数据库的保持一致哦)

详解StoreConfig类:首先我们定义三个成员变量,然后给每一个成员变量打上一个@value注解,注意@value里面的内容一定是资源文件里面的key值。这里的@ImportResource注解就是指明一个资源文件,在这个资源文件里面获取到对应的数据。那么@Configuration注解是用来干嘛的呢?为什么不用@Component注解呢?其实是这样的,@Component注解用于将所标注的类加载到 Spring 环境中,这时候是需要配置component-scan才能使用的,而@Configuration注解是Spring 3.X后提供的注解,它用于取代XML来配置 Spring。

7.@Bean注解用来标识配置和初始化一个由SpringIOC容器管理的新对象的方法,类似XML中配置文件的

ps:默认的@Bean注解是单例的,那么有什么方式可以指定它的范围呢?所以这里才出现了@Scope注解

8.@Scope注解,在@Scope注解里面value的范围和Bean的作用域是通用的,proxyMode的属性是采用哪一种的单例方式(一种是基于接口的注解,一种是基于类的代理)

案例:@Bean和@Scope用法分析:

    @Bean
    @Scope(value ="session",proxyMode = "scopedProxyMode.TARGET_CLASS")
    public UserPreferences userPreferences(){
        return new userPreferences();
    }

    @Bean
    public service userService(){
        UserService service =new SimpleUserService();
        service.setUserPreferences(userPreferences);
        return service;
    }
ログイン後にコピー

以上がSpring Frameworkのアノテーションの使用コード例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Spring Boot と OpenAI の出会いによる新しいプログラミング パラダイム Spring Boot と OpenAI の出会いによる新しいプログラミング パラダイム Feb 01, 2024 pm 09:18 PM

2023年、AI技術が注目を集め、プログラミング分野を中心にさまざまな業界に大きな影響を与えています。 AI テクノロジーの重要性に対する人々の認識はますます高まっており、Spring コミュニティも例外ではありません。 GenAI (汎用人工知能) テクノロジーの継続的な進歩に伴い、AI 機能を備えたアプリケーションの作成を簡素化することが重要かつ緊急になっています。このような背景から、AI 機能アプリケーションの開発プロセスを簡素化し、シンプルかつ直観的にし、不必要な複雑さを回避することを目的とした「SpringAI」が登場しました。 「SpringAI」により、開発者はAI機能を搭載したアプリケーションをより簡単に構築でき、使いやすく、操作しやすくなります。

Spring Boot と Spring AI を使用して生成人工知能アプリケーションを構築する Spring Boot と Spring AI を使用して生成人工知能アプリケーションを構築する Apr 28, 2024 am 11:46 AM

Spring+AI は業界リーダーとして、強力で柔軟な API と高度な機能を通じてさまざまな業界に最先端のソリューションを提供します。このトピックでは、さまざまな分野での Spring+AI の応用例を詳しく掘り下げ、Spring+AI がどのように特定のニーズを満たし、目標を達成し、これらの教訓をより広範囲のアプリケーションに拡張するかを示します。このトピックが Spring+AI の無限の可能性をより深く理解し、活用するきっかけになれば幸いです。 Spring フレームワークはソフトウェア開発の分野で 20 年以上の歴史があり、Spring Boot 1.0 バージョンがリリースされてから 10 年が経過しました。今、その春に異論を唱える人はいない

Springプログラマティックトランザクションの実装方法は何ですか? Springプログラマティックトランザクションの実装方法は何ですか? Jan 08, 2024 am 10:23 AM

Spring プログラムによるトランザクションを実装する方法: 1. TransactionTemplate を使用する; 2. TransactionCallback および TransactionCallbackWithoutResult を使用する; 3. Transactional アノテーションを使用する; 4. TransactionTemplate を @Transactional と組み合わせて使用​​する; 5. トランザクション マネージャーをカスタマイズする。

JUnit フレームワークのテスト メソッドにアノテーションはどのように使用されますか? JUnit フレームワークのテスト メソッドにアノテーションはどのように使用されますか? May 06, 2024 pm 05:33 PM

JUnit フレームワークのアノテーションは、テスト メソッドの宣言と構成に使用されます。主なアノテーションには、@Test (テスト メソッドの宣言)、@Before (テスト メソッドの実行前に実行されるメソッド)、@After (テスト メソッドの後に実行されるメソッド) があります。が実行される)、@ BeforeClass (すべてのテスト メソッドが実行される前に実行されるメソッド)、@AfterClass (すべてのテスト メソッドが実行された後に実行されるメソッド)、これらのアノテーションは、テスト コードを整理して簡素化し、テスト コードの信頼性を向上させるのに役立ちます。明確な意図と構成を提供することで、読みやすさと保守性を向上させます。

PHP コードドキュメントの王様: PHPDoc の上級ガイド PHP コードドキュメントの王様: PHPDoc の上級ガイド Mar 02, 2024 am 08:43 AM

はじめに: PHPDoc は、理解しやすく有益なドキュメントを作成する PHP コードのコメント標準です。 PHPDoc では、特定のコメント タグを使用することで、開発者が関数、クラス、メソッド、その他のコード要素に関する重要な詳細を提供できるようになります。この高度なガイドでは、PHPDoc を詳しく説明し、その機能を実証し、効果的な文書化戦略を提供します。構文とタグ: PHPDoc コメントは二重スラッシュ (//) または複数行コメント (/**/) で始まります。一般的なアノテーション タグをいくつか示します。 @param: 関数またはメソッドのパラメータを定義します。 @return: 関数またはメソッドの戻り値を指定します。 @throws: 関数またはメソッドによってスローされる可能性のある例外について説明します。 @var: クラスの属性またはインスタンスを定義します

Jackson ライブラリのアノテーションは、JSON のシリアル化と逆シリアル化をどのように制御しますか? Jackson ライブラリのアノテーションは、JSON のシリアル化と逆シリアル化をどのように制御しますか? May 06, 2024 pm 10:09 PM

Jackson ライブラリのアノテーションは、JSON のシリアル化と逆シリアル化を制御します。 シリアル化: @JsonIgnore: プロパティを無視します @JsonProperty: 名前を指定します @JsonGetter: get メソッドを使用します @JsonSetter: set メソッドを使用します Deserialization: @JsonIgnoreProperties: プロパティ @ JsonProperty を無視します:名前を指定 @JsonCreator: コンストラクターを使用 @JsonDeserialize: カスタム ロジック

MyBatisアノテーションと動的SQLの操作手順を詳しく解説 MyBatisアノテーションと動的SQLの操作手順を詳しく解説 Feb 18, 2024 pm 03:29 PM

MyBatis アノテーション動的 SQL の使用法の詳細な紹介 MyBatis は、便利な永続化操作を提供する永続化レイヤー フレームワークです。実際の開発では、通常、柔軟なデータ操作を実現するために、ビジネス ニーズに基づいて SQL ステートメントを動的に生成する必要があります。 MyBatis アノテーション動的 SQL は、この要求を満たすように設計されています。

Spring でトランザクション分離レベルを設定する方法 Spring でトランザクション分離レベルを設定する方法 Jan 26, 2024 pm 05:38 PM

Spring でトランザクション分離レベルを設定する方法: 1. @Transactional アノテーションを使用します; 2. Spring 構成ファイルに設定します; 3. PlatformTransactionManager を使用します; 4. Java 構成クラスに設定します。詳細な導入方法: 1. @Transactional アノテーションを使用し、トランザクション管理が必要なクラスまたはメソッドに @Transactional アノテーションを追加し、属性に分離レベルを設定します。 2. Spring の設定ファイルなどで

See all articles