微信截图_20230405221044

java 内置注解

@Target(Elementype.TYPE)用来表示注解作用范围

//@Target用来表示注解作用范围,超过这个作用范围,编译的时候就会报错。
//@Target(ElementType.TYPE)——接口、类、枚举、注解
//@Target(ElementType.FIELD)——字段、枚举的常量
//@Target(ElementType.METHOD)——方法
//@Target(ElementType.PARAMETER)——方法参数
//@Target(ElementType.CONSTRUCTOR) ——构造函数
//@Target(ElementType.LOCAL_VARIABLE)——局部变量
//@Target(ElementType.ANNOTATION_TYPE)——注解
//@Target(ElementType.PACKAGE)——包,用于记录java文件的package信息

@Retention(RetentionPolicy.RUNTIME)

// 1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
// 2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
// 3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;

java 反射机制

//通过 Class 对象获取指定的 Constructor 对象,再调用 Constructor 对象的 newInstance() 方法创建对象,优势是此方式可以指定构造器构造类的实例
Object o = aClass.getConstructor().newInstance();
```java
//类加载器
Class<?> aClass = classLoader.loadClass(replace);

//通过 Class 对象获取指定的 Constructor 对象,再调用 Constructor 对象的 newInstance() 方法创建对象,优势是此方式可以指定构造器构造类的实例
Object instance = aClass.getConstructor().newInstance();
//得到该类下的所有字段属性   返回Field类型
aClass.getDeclaredFields()

Spring 注解

@Component 定义Spring管理Bean(也就是将标注@Component注解的类交由spring管理)

@component是spring中的一个注解,它的作用就是实现bean的注入。在Java的web开发中,提供3个@Component注解衍生注解(功能与@component一样)分别是:

1、@Controller 控制器(注入服务) 用于标注控制层,相当于struts中的action层。

2、@Service 服务(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理

3、@Repository(实现dao访问) 用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件

而@Component泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。

@ComponentScan

如果你理解了ComponentScan,你就理解了Spring是一个依赖注入(dependency injection)框架。所有的内容都是关于bean的定义及其依赖关系。
定义Spring Beans的第一步是使用正确的注解@Component或@Service或@Repository或者@Controller
但是,Spring不知道你定义了某个bean除非它知道从哪里可以找到这个bean
ComponentScan做的事情就是告诉Spring从哪里找到bean
由你来定义哪些包需要被扫描。一旦你指定了,Spring将会在被指定的包及其下级包中寻找bean

@Scope

@Scope注解是 Spring IOC 容器中的一个作用域,在 Spring IOC 容器中,他用来配置Bean实例的作用域对象。@Scope 具有以下几种作用域:

singleton 单实例的(单例)(默认)   ----全局有且仅有一个实例
prototype 多实例的(多例)   ---- 每次获取Bean的时候会有一个新的实例
reqeust    同一次请求 ----request:每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效
session    同一个会话级别 ---- session:每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效
```java
//Introspector.decapitalize()如果字符串的第二个字符非大写,则将字符串的第一个字符转换为小写
//   并返回转换后的字符
 //aClass.getSimpleName()  //得到类的简写名称
   beanName = Introspector.decapitalize(aClass.getSimpleName());

spring 容器启动

1、扫描(根据Appconfig配置文件)识别bean 并创建bean实例

2、bean 的生命周期 创建 依赖注入