Spring6注解式开发如何实现高效策略?

摘要:spring框架创建bean就是利用反射机制 反射机制的代码如下: public static void main(String[] args) throws Exception { System.out.println(&
spring框架创建bean就是利用反射机制 反射机制的代码如下: public static void main(String[] args) throws Exception { System.out.println("Hello, World!"); // 使用反射机制调用方法 // 获取类 Class<?> clazz = Class.forName("com.ali.bean2.SomeService"); // 获取方法 Method method = clazz.getMethod("doSomething", String.class, int.class); // 获取对象 Object obj = clazz.newInstance(); // 方法调用 // obj: 哪个对象调用这个方法 // "hello", 42: 方法参数 // hello: 方法的返回值 Object hello = method.invoke(obj, "hello", 42); } spring IoC注解式开发 注解主要是为了简化xml配置。 注解怎么定义 新建Java Class 时选择Annoation 类型的文件,这样就创建了一个新的注解 // 自定义注解 // @Target 标注注解的注解,叫做元注解 // ElementType.TYPE: 表示可以标注在类上 // ElementType.FIELD: 表示可以标注在属性上 // 使用某个注解的时候,如果注解的属性名是value,可以省略属性名 // 使用某个注解的时候,如果注解的属性值是数组,并且数组中只有一个值,可以省略大括号 @Target(value = {ElementType.TYPE,ElementType.FIELD}) // @Retention 标注注解的生命周期,叫做元注解,表示最终保留在class文件中,并且可以被反射机制读取 // RetentionPolicy.SOURCE: 注解只在源码中存在,编译成字节码后就不存在了 // RetentionPolicy.CLASS: 注解在源码和字节码中都存在,运行时不存在(默认值),也就是不能被反射机制读取 // RetentionPolicy.RUNTIME: 注解在源码、字节码和运行时都存在 @Retention(RetentionPolicy.RUNTIME) public @interface Component { String value(); } 怎么通过反射机制读取注解 假设user类被注解@Component修饰 @Component("userBean") public class User { } public static void main(String[] args) throws Exception { // 使用反射机制读取注解 // 获取类 Class<?> userClazz = Class.forName("com.ali.component.User"); // 判断类上是否有某个注解 boolean hasAnnotation = userClazz.isAnnotationPresent(Component.class); if (hasAnnotation) { // 获取类上的注解对象 Component component = userClazz.getAnnotation(Component.class); // 访问注解的属性 System.out.println("component value: " + component.value()); } } 组件扫描原理 主要是通过反射机制实例化注解标记的类的对象。 public static void main(String[] args) { // 根据一个包名,扫描这个包下面的所有类,当这个类有@Component注解时,实例化这个类,key是@Component注解的value,value是实例化的对象 String packageName = "com.ali.component"; // 将包名中的“.”替换成“/” String path = packageName.replaceAll("\\.", "/"); // 包是在系统恨路径下的一个目录。
阅读全文