這篇文章主要描述分散式互斥方法,包括什麼是分散式互斥,分散式互斥地三種方法:集中式方法、分散式方法和令牌環方法。 ...
1.基於註解的配置與基於xml的配置
(1) 在xml配置文件中,使用context:annotation-config</context:annotation-config>標簽即可開啟基於註解的配置,如下所示,該標簽會隱式的向容器中添加ConfigurationClassPostProcessor,AutowiredAnnotationBeanPostProcessor,CommonAnnotationBeanPostProcessor,PersistenceAnnotationBeanPostProcessor,RequiredAnnotationBeanPostProcessor這5個後置處理器,用於註解配置
<beans ....>
<!-- 開啟基於註解的配置,該標簽不常用,常用下麵的<context:component-scan />標簽 -->
<context:annotation-config></context:annotation-config>
<!-- 開啟註解掃描,它不僅有著 <context:annotation-config />標簽相同的效果,還提供了一個base-package屬性用來指定包掃描路徑,將路徑下所掃描到的bean註入到容器中 -->
<!-- <context:component-scan base-package="cn.example.spring.boke"></context:component-scan> -->
</beans>
(2) Spring同時支持基於註解的配置與基於xml的配置,可以將兩者混合起來使用;註解配置會先於xml配置執行,因此,基於xml配置註入的屬性值會覆蓋掉基於註解配置註入的屬性值,如下所示
//定義一個普通bean
@Component(value = "exampleA")
public class ExampleA {
//通過註解,註入屬性值
@Value("Annotation injected")
private String str;
public void setStr(String str) {
this.str = str;
}
public String getStr() {
return str;
}
}
<!-- xml配置文件 -->
<beans ....>
<context:component-scan base-package="cn.example.spring.boke"></context:component-scan>
<!-- 通過xml,註入屬性值,註意:這裡bean的id與上面基於註解所提供的bean的id是一致的 -->
<bean id="exampleA" class="cn.example.spring.boke.ExampleA">
<property name="str" value="xml inject"></property>
</bean>
</beans>
//測試,列印結果為 xml inject,證明註解方式會先於xml方式執行
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("boke/from.xml");
System.out.println(((ExampleA) ctx.getBean("exampleA")).getStr());
2.@Required
(1) @Required註解用於setter方法上,表示某個屬性值必須被註入,若未註入該屬性值,則容器會拋出異常,從Spring 5.1版本開始,該註解已被棄用,Spring目前推薦使用構造函數註入來註入這些非空依賴項,如下所示
//ExampleA有一個非空屬性str
public class ExampleA {
private String str;
@Required
public void setStr(String str) {
this.str = str;
}
}
<!-- xml配置文件 -->
<beans ....>
<context:annotation-config></context:annotation-config>
<bean id="exampleA" class="cn.example.spring.boke.ExampleA">
<!-- 必須要設置str屬性值,如果將下麵這條標簽註釋掉,那麼啟動時容器會拋出異常 -->
<property name="str" value="must"></property>
</bean>
</beans>
3.@Autowired
未完待續...