[春]、アノテーション駆動型の開発 - 自動組立 - Autowired&予選&プライマリ@ @ @

記事のディレクトリ

このブログのデモ元アドレス
https://github.com/suchahaerkang/spring-annotation.git

IOCコンテナ相互に依存コンポーネントが自動的に割り当てられます。この記事では、DI(依存性注入)のことを、自動組立春学習を開始
@Autowired時の自動組立スプリングは、いくつかの関連するコメントを提供するために、我々最初に見てこのコメントを

1 @Autowired

@Autowired注解的作用是去容器中找它标注的那个组件,如果找到了就将其赋值
まず、三の成分は、その後、我々は、対応する構成要素にする依存性注入@Autowired方法をBookController、BookServiceを、BookDao、及びBookController依存BookServiceを、BookServiceを依存BookDao通過さ作成します

/**
 * @description:
 * @author: sukang
 * @date: 2020-03-04 15:09
 */
@Controller
public class BookController {

    @Autowired
    private BookService bookService;
}

/**
 * @description:
 * @author: sukang
 * @date: 2020-03-04 15:09
 */
@ToString
@Service
public class BookService {

    @Autowired
    private BookDao bookDao;
}

/**
 * @description:
 * @author: sukang
 * @date: 2020-03-04 15:09
 */
@Repository
public class BookDao {
}

私たちは、その後に容器に登録この@ComponentScan 3つのコンポーネントを使用します

/**
 * @description:
 * @author: sukang
 * @date: 2020-03-07 14:05
 */
@ComponentScan({"com.wolfx.controller","com.wolfx.service", "com.wolfx.dao"})
@Configuration
public class MainConfigOfAutowired {

}

書き込みテストケース

//测试@Autowired
@Test
public void test01(){
    //创建容器
    ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfAutowired.class);
    //从容器中获取BookService组件
    BookService bookService = applicationContext.getBean(BookService.class);
    System.out.println(bookService);
}

業績
ここに画像を挿入説明
@Autowired自动注入组件的时候,首先是去容器找那个组件对应的类型,如果容器中只有一个对应组件的类型,那么就注入这个组件
Autowiredがどのように自動的にそれを組み立てます@コンポーネントの同じタイプは、複数のコンテナを存在する場合、その後の質問は、です。ここでは、容器内にBookDaoコンポーネントを登録し、IDがbookDao2あり、lable 2、それに割り当てられた属性

@Bean("bookDao2")
public BookDao bookDao(){
    BookDao bookDao = new BookDao();
    bookDao.setLable(2);
    return bookDao;
}

結果を操作
ここに画像を挿入説明
Autowired噴射特性lable = 1である@我々は、知っている結果から、型コンポーネントBookDao、アセンブリlable = 1成分むしろ2 = lableより自動注入する理由は、@AutowiredはBookServiceをのコンポーネントBookDaoをマークしているためbookDaoという名前のコンポーネントプロパティ。所以我们得出结论,如果容器中有多个相同类型的组件,那么@Autowired将自动注入容器中id为属性名的那个实例
ps:如果@Autowired标注属性,自动动注入的时候在容器中没有找到属性相关类型的组件,将会报在容器中找不到那个组件的错误我々は二つの方法に登録BookDaoコンポーネントがコンテナのコメントアウトされて入れ、その結果は次の通りです:
ここに画像を挿入説明
溶液をfalseに変更@Autowiredなり、デフォルトはtrueです

@Autowired(required = false)
private BookDao bookDao;

業績
ここに画像を挿入説明

2 @Qualifier

@Qualifier的作用是:如果容器中有多个类型相同的实例,配合注解@Autowired自动注入想要的那个实例
私たちはこの注釈を学びましょう
、我々は自動的にインスタンスbookDao2ためBookServiceをのidを注入したい、たとえば、

@Qualifier("bookDao2")
@Autowired
private BookDao bookDao;

業績
ここに画像を挿入説明

3 @Primary

@Primary的作用:容器中注册了多个相同类型的组件情况下,如果在自动转配的时候想要某个实例优先被装配,那么你可以在注册组件的时候标注上@Primary这个注解
ここでは、学びます。とき@Primaryのラベル例えば、我々は、インスタンスID優先自動組立bookDao2をしたい、我々はbookDao2にコンテナに登録しています

@Primary
@Bean("bookDao2")
public BookDao bookDao(){
    BookDao bookDao = new BookDao();
    bookDao.setLable(2);
    return bookDao;
}

@Qualifier注釈からテスト結果に影響を与える恐れのために、我々は、上記のコメントをテストした
結果は以下の通りです
ここに画像を挿入説明

公開された78元の記事 ウォン称賛32 ビュー90000 +

おすすめ

転載: blog.csdn.net/suchahaerkang/article/details/104713898