spring_5
1:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD,ElementType.METHOD})
public @interface ResourceAnnotation {
String name() default "";
}
2:
返回屬性的類型 是否是 指定參數的類型或者是指定參數的基類(即把參數強轉成properdesc類型是否可以,可以則返回true,否則返回false)
PropertyDescriptor properdesc = Introspector.getBeanInfo(Bean.class).getPropertyDescriptors();
properdesc.getPropertyType().isAssignableFrom(other.class);
3:
getDeclaredFields() 得到所有類中聲明的字段(但不包括從父類繼承過來的類型)
4:
用注解來實現依賴注入的規則:
(1):在 字段 或 setter 方法上注明注解
(2):讀取XML文件
(3):得到所有的屬性 遍歷 賦值
(4): 得到所有的字段 判斷是否有注解 賦值
5:
@Autowired(required=false) 中 required 默認為true,指的是當找不到時會拋出異常,當為false時,會給其賦值為null
6:
自動裝配的幾種方式:
byType: 按類型裝配,可以根據屬性的類型,在容器中尋找跟該類型匹配的bean。
如果發現多個,那么將會拋出異常。如果沒有找到,即屬性值為null
byName: 按名稱裝配,可以根據屬性的名稱,在容器中尋找跟該屬性名相同的bean,
如果沒有找到,即屬性為null
constructor與byType的方式類似,不同之處在于它應用于構造函數。如果在容器中沒有找到與構造器參數類型一致的bean,那么將會拋出異常。
autodetect: 通過bean類的自省機制(introspection)來決定是使用constructor還是
byType方式進行自動裝配。如果沒有發現默認的構造器,那么將使用byType方式。
7:
@Service 用于標注業務層組件
@Controller 用于標注控制層組件(如Struts的action)
@Repository 用于標注數據訪問組件 即DAO組件
@Component 泛指組件,當組件不好歸類的時候,我們可以使用這個注解進行標注。
8:
使用Spring classpath 自動掃描 方式 把組件納入spring容器中管理 的步驟:
一:加入context命名空間
二:在XML文件中加入 元素 <context:component-scan base-package="cn.itcast"/> 注冊Spring自動掃描處理器,這個元素默認注冊了以前<context:annotation-config />元素所注冊的所有處理器
三:在DAO類前加入 @Repository 注解,在Service類前加入 @Service 注解,在控制組件類前加入 @Control 注解
四:注解所注明的類默認為單例 即 @Scope("singleton") ,如果需要,可以用 @Scope("prototype") 來使用 原型模式(每一次請求,可以標注在 @Control 上)
五:可以使用 @PostContruct 來標注初始化的方法 ,使用 @PreDestory 來標注銷毀的方法 。其 @PostContruct 等同于 以前在XML文件中寫的 init-method="" 注解,其 @PreDestory 注解等同于 在xml文件中配置的 destory-method="" 元素
六:要使其執行 @PreDestory 所標注的方法則使用 單例singleton模式,而不是原型prototype模式
9:
使用cglib 來創建沒有實現接口的類的代理對象
一:加入 cglib-nodep-2.1_3.jar 文件
二:Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(要代理的類);
enhancer.setCallback(實現MethodInterceptor接口的類);
四:寫一個實現 MethodInterceptor 接口的類,并且實現其方法
posted on 2011-01-05 20:59 calmJava 閱讀(347) 評論(0) 編輯 收藏 所屬分類: Spring