@Resource、@Autowired和default-autowire區別聯系
今天看了一工程,里面既有default-autowire,又有@Autowired,還有@Resource。我就不明白是他們寫程序的風格不一致,還是根本區分不開這些的關系,於是我就問其中一個工程師,原來真的是還沒明白這三者的區別,這里我就介紹下,希望能給初學者一些幫助。
一、@Resource與@Autowired的區別?
1.@Autowired按byType自動注入。
2.@Resource默認按byName自動注入。
但是@Resource有兩個屬性是比較重要的,分是name和type;
如果使用name屬性,則使用byName的自動注入策略,而使用type屬性時則使用byType自動注入策略;
3.@Autowired是spring自己定義的注解,@Resource是J2EE的,由JSR-250規范定義。
PS:個人建議用@Resource,不為什么,減少與spring的耦合。
那么,
二、@Autowired、@Resource與default-autowire="byType"、default-autowire="byName"有什么關系呢?
確切的說,沒有任何關系。
Annotation注入和autowire是沒有關系的。
Autowire的功能是在application context里實現的,
而annotation注入的功能是通過BeanPostProcessor來實現的。無論你是否autowire,只要你寫了@Resource或@Autowired注解,對象就會被注入。
PS:個人不建議打開default-autowire="byName",這會導致很多不確定的注入。
