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 接口的类,并且实现其方法