Autowired @、予選@、リソース@、@ Autowiredの価値春の注釈@、予選@、リソース@、値@の春の注釈

抜粋:https://www.cnblogs.com/yichunguo/p/12110755.html

Autowired @、予選@、リソース@、値@の春の注釈

 

はじめに
Autowired @は、予選@、リソース@値@、 4ノートが注入データに使用され、その役割は同じであるラベルに書かれたXML設定ファイルであると豆のタグ!特別なフォーカスを説明するためにこのブログのエントリは@Autowiredのコメントです

図1に示すように、第一のシナリオが与えられます。

特定のシナリオに話す前に@Autowiredコメント:

DAOレベルのコード

@Repository
public class AccountDao {
    public void save() {
        System.out.println("dao数据save成功了...."); } }

サービスレベルのコード

@Service
public class AccountImpl implements AccountService { private AccountDao accountDao; @Override public void save() { accountDao.save(); } }

プレゼンテーション層コントローラコード:

//模拟一个表现层功能
public class AccountController {
    public static void main(String[] args) { //1.获取核心容器对象 ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("Applicationcontext.xml"); //2.根据id获取Bean对象 AccountService as = (AccountService)ac.getBean("accountImpl"); as.save(); System.out.println(as); } }

結果オペレーティング
ここに画像を挿入説明
私たちは信じているjava.lang.NullPointerExceptionの例外、特に誠心誠意、に慣れているポインタNULL .....

なぜ、これはそれが異常ありか?もちろん、あなたが持つサービスのうち、コードから見ることができます  AccountDao 異常NULLポインタによって引き起こさに注入されていない財産の種類、そして残りは.... @Autowiredコメントデビューにあります

2、@ Autowired

スプリング2.5発表@Autowired注釈は、それがパラメータ、クラスフィールド、メソッドやコンストラクタ標識することができる等【主に使用される変数メソッド自動組立作業を完了するために、上で]。セットを排除するために@Autowiredを使用することにより、メソッドを取得し、あること、注入@Autowired注釈属性データ・セットの使用は、このクラスはメソッド、迅速、便利でを提供して必要はありません@Autowiredそして、中に書かれたXML設定ファイル内のBeanタグの役割に< property >役割のラベルと同じです。

前回の記事では春にデカップリングファクトリパターンの実装プログラムを使用する方法の?私たちは多かれ少なかれ根本的な春IOCが実際に知っている地図のコンテナの構造、いわゆるキーは、Beanタグのidで、値が対応するBeanクラスのラベルです

@Autowired自動組立がキーFOUNDに直接コンテナ船に対応するIOC最初の属性をスキップされます!これは、キーとは何の関係もありません。

自動アセンブリ3例を@Autowired:

1は、容器が一つだけBeanオブジェクトの種類があり、@Autowiredは、変数の型マッチングを修正している、あなたは成功を注入することができます!
図2に示すように、容器は、Bean @Autowired変更されたオブジェクト・タイプと可変タイプのマッチングではなく、操作は、注射が与えられません。
図3は、そこに複数のBeanコンテナオブジェクトタイプがあり、変数タイプが成功注射[見つけ、@Autowiredを変数名に応じて変更することが発見次に、一致@Autowired修飾されたフォーカス ]

多くの人が無視するか、第三のポイントを知りません!

3、@修飾子

プログラムはそう@Qualifierこのコメントで、非常に柔軟ではありませんので、第三の場合は、上記@Autowiredによると、我々は、対応する注入に変数名を変更する必要があります。名前による注入@Qualifier効果、上記注入に応じて基礎クラス。クラスメンバーへの単回注射は、それほど@Qualifier注釈が非常に限られた(パラメータ注入法が場合単独で用いてもよい)、したがってあまり使用されない場合に使用することができません。@Qualifierしばしば@Autowiredと組み合わせて使用される、自動アセンブリの特定の名前を示すために使用されます


    @Autowired //如果单纯一个@Autowired 注解则表示找类型为IAccuntDao的,如果有两个类型为IAccuntDao的,则接着匹配类型为IAccuntDao而且名字为accountDao的【缺点:要改变量名指定】
    @Qualifier("accountDao2") //加上这个注解直接找类型为IAccuntDao而且名字为accountDao的
    private IAccuntDao accountDao;
    
    所以这段代码注解的意思就是直接找类型为IAccuntDao而且名字为accountDao的组件

実際には、以下の注意事項と同等以上のコメントは、我々は戻ってくるだろう。

 @Resource("accountDao2")
 private IAccuntDao accountDao;

4、リソース@

J2EEによって提供さ@Resourceは、BYNAMEデフォルトに応じて自動的にリソース@もちろんの二つの重要な特性、名前、およびタイプ、名前でデフォルトがありますが、(自動的に注入された名前で)注入され、type属性について話をする必要はありません、type属性を使用します余分は、同様名前でそう@Resourceのために自動的に注入された覚えて、@Autowiredを使用する場合があります!

5、のリソース@ Autowired @の違い、

私は2つのノートは非常に類似しており、簡単に混乱していると言っていました。

Autowired、資源、主に以下の点@主な違い@:

  @Autowired @資源
ノートプロバイダ J2EE
モードの自動組立 プロパティ 名前

実際には、この上の2点間の主な違いは、当然のことながら、ここでは詳細、一時的に輪郭を持っているにバインドされています。

もちろん、より多くの重要な点は次のとおりです。@Resource同等@Autowired + @Qualifier

6、値@

Autowired @、予選@、3つだけの自動組立のためのリソース@は、データの他のBeanタイプ、および基本的な種類を注入すると、文字列の型は、上記のコメントを達成するために使用することはできませんので。値は、基本的なサービスの種類と文字列に専念@だから、この注釈@valueがあります。

さらに、@value注釈は、プロパティの値は、指定されたデータの値を。春SPEL(すなわち春EL式)で使用することができます。SPEL文言:$ {}表現は、もちろん、同様である式{#}文言をMyBatisの

@Value("#{2*3}")  //#写法 表示6
private int age;

@Value("178")    //普遍写法 178
private int height;

@Value("${man.weight}") //SpEL的写法一般操作配置文件中数据 private int weight;

注:コレクションの種類だけでXMLを注入することによって達成することができます

7まとめ

もっとAutowired @、予選@、リソース@、バリュー@ 4つのノートは、噴射データに使用され、その役割があり、同じであるラベルに書かれたXML設定ファイル内のBeanタグ!

この記事へのあなたの助けの少しがある場合には、賞賛の聖歌をポイントしてください、あなたは私の最大の動機であることに同意、ありがとう〜

最後に、そこに不足しているか正しくない場合、感謝し、正しい私の批判をしてください!ご質問がある場合は、返信する絶対初めてメッセージを残してください!

私はいくつかのJava学習教材との大きな波があり、あなたが公共の数に集中することを歓迎するJavaの電子書籍など周志明教師の深さJava仮想マシン、Javaプログラミングのアイデア、コア技術のボリューム、西方のデザインパターン、Javaの並行プログラミングの戦闘など、... ...聖書は、Tomcat上で速い車を言っていないのjava、行くがたです!主なものは、技術、憧れ技術、技術の追求を探ることである、良いポットの友人は、ああ来ていると述べました...

ここに画像を挿入説明

人生の一種であるまで生きるために毎日飛ぶことはありませんでした....
 
カテゴリー:  春が列を学びます

はじめに
Autowired @は、予選@、リソース@値@、 4ノートが注入データに使用され、その役割は同じであるラベルに書かれたXML設定ファイルであると豆のタグ!特別なフォーカスを説明するためにこのブログのエントリは@Autowiredのコメントです

図1に示すように、第一のシナリオが与えられます。

特定のシナリオに話す前に@Autowiredコメント:

DAOレベルのコード

@Repository
public class AccountDao {
    public void save() {
        System.out.println("dao数据save成功了...."); } }

サービスレベルのコード

@Service
public class AccountImpl implements AccountService { private AccountDao accountDao; @Override public void save() { accountDao.save(); } }

プレゼンテーション層コントローラコード:

//模拟一个表现层功能
public class AccountController {
    public static void main(String[] args) { //1.获取核心容器对象 ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("Applicationcontext.xml"); //2.根据id获取Bean对象 AccountService as = (AccountService)ac.getBean("accountImpl"); as.save(); System.out.println(as); } }

結果オペレーティング
ここに画像を挿入説明
私たちは信じているjava.lang.NullPointerExceptionの例外、特に誠心誠意、に慣れているポインタNULL .....

那么为啥会出现这个异常呢?很显然从代码中可以看出来service中有着 AccountDao 类型的属性没有注入而引发的空指针异常,那么接下来就到@Autowired注解登场了....

2、@Autowired

Spring 2.5 引入了 @Autowired 注释,它可以对类成员变量、方法及构造函数、参数等进行标注【主要还是用在变量方法上】,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法,也就是说,使用@Autowired注解注入属性数据不需要这个类提供set方法,方便快捷@Autowired作用就和在xml配置文件中的bean标签中写一个< property >标签的作用是一样的。

在之前的文章Spring中如何使用工厂模式实现程序解耦?中,我们多多少少知道spring的IOC底层实际上就是一个Map结构容器,所谓key 就是 bean标签 中的 id,value 则是对应 bean标签 中的 class

@Autowired自动装配首先会在IOC容器中跳过key直接去容器中找到对应的属性!也就是说与key无关。

@Autowired自动装配的三种情况:

1、容器中有唯一的一个bean对象类型和被@Autowired修饰的变量类型匹配,就可以注入成功!
2、容器中没有一个bean对象类型和被@Autowired修饰的变量类型匹配,则注入失败运行报错。
3、容器中有多个bean对象类型和被@Autowired修饰的变量类型匹配,则根据被@Autowired修饰的变量名寻找,找到则注入成功【重点

很多人会忽略或者不清楚第三点!!!

3、@Qualifier

根据上面@Autowired的第三种情况,需要更改变量名来对应注入,这样就对程序不是很灵活,于是有了@Qualifier这个注解。@Qualifier的作用是在按照类中注入的基础之上再按照名称注入。它在给类成员注入时不能单独使用(但是在给方法参数注入时可以单独使用),因此@Qualifier注解很受限制,因此用的不是很多。@Qualifier常常组合@Autowired一起使用,用来指明具体名字的自动装配


    @Autowired //如果单纯一个@Autowired 注解则表示找类型为IAccuntDao的,如果有两个类型为IAccuntDao的,则接着匹配类型为IAccuntDao而且名字为accountDao的【缺点:要改变量名指定】
    @Qualifier("accountDao2") //加上这个注解直接找类型为IAccuntDao而且名字为accountDao的
    private IAccuntDao accountDao;
    
    所以这段代码注解的意思就是直接找类型为IAccuntDao而且名字为accountDao的组件

其实上面的注解等价于下面的注解,我们后面会讲到:

 @Resource("accountDao2")
 private IAccuntDao accountDao;

4、@Resource

@Resource由J2EE提供,默认是按照byName自动注入(通过名字自动注入),@Resource有两个重要的属性,name和type,当然默认是通过name,这里type属性就没必要讲了,用type属性多此一举,还不如用@Autowired,因此对于@Resource记住通过名字自动注入就好了

5、@Autowired、@Resource的区别

不得不说这两个注解非常相似,而且很容易混淆。

@Autowired、@Resource的主要区别主要有下面几点:

  @Autowired @Resource
注解提供者 Spring J2EE
自动装配方式 属性 名字

其实主要的区别就这一两点,当然也肯定有着细节,这里就暂时不概述了。

もちろん、より多くの重要な点は次のとおりです。@Resource同等@Autowired + @Qualifier

6、値@

Autowired @、予選@、3つだけの自動組立のためのリソース@は、データの他のBeanタイプ、および基本的な種類を注入すると、文字列の型は、上記のコメントを達成するために使用することはできませんので。値は、基本的なサービスの種類と文字列に専念@だから、この注釈@valueがあります。

さらに、@value注釈は、プロパティの値は、指定されたデータの値を。春SPEL(すなわち春EL式)で使用することができます。SPEL文言:$ {}表現は、もちろん、同様である式{#}文言をMyBatisの

@Value("#{2*3}")  //#写法 表示6
private int age;

@Value("178")    //普遍写法 178
private int height;

@Value("${man.weight}") //SpEL的写法一般操作配置文件中数据 private int weight;

注:コレクションの種類だけでXMLを注入することによって達成することができます

7まとめ

もっとAutowired @、予選@、リソース@、バリュー@ 4つのノートは、噴射データに使用され、その役割があり、同じであるラベルに書かれたXML設定ファイル内のBeanタグ!

この記事へのあなたの助けの少しがある場合には、賞賛の聖歌をポイントしてください、あなたは私の最大の動機であることに同意、ありがとう〜

最後に、そこに不足しているか正しくない場合、感謝し、正しい私の批判をしてください!ご質問がある場合は、返信する絶対初めてメッセージを残してください!

私はいくつかのJava学習教材との大きな波があり、あなたが公共の数に集中することを歓迎するJavaの電子書籍など周志明教師の深さJava仮想マシン、Javaプログラミングのアイデア、コア技術のボリューム、西方のデザインパターン、Javaの並行プログラミングの戦闘など、... ...聖書は、Tomcat上で速い車を言っていないのjava、行くがたです!主なものは、技術、憧れ技術、技術の追求を探ることである、良いポットの友人は、ああ来ていると述べました...

ここに画像を挿入説明

おすすめ

転載: www.cnblogs.com/xichji/p/12122618.html