1、注解
1.1、什么是注解?
注解(Annotation)是从JDK5.0开始引入的新技术
1.2、注解的作用
不是程序本身,可以对程序做出解释
可以被其它程序读取(如:编译器)
1.3、注解格式
@注解名,可以添加参数
1.4、注解的使用地方
package
class
method
field
2、内置注解?
在本文Java注解整理JavaSE注解中详细解释Java内置注解由哪些。
3、元注解?
作用:
负责注解其他注解
4个元注解
@Target:用于描述注解的使用范围,参数类型是ElementType[],参数可取值为:
ElementType.TYPE:接口、类、枚举
ElementType.FIELD:字段、枚举的常量
ElementType.METHOD:方法
ElementType.PARAMETER:方法参数
ElementType.CONSTRUCTOR:构造函数
ElementType.LOCAL_VARIABLE:局部变量
ElementType.ANNOTATION_TYPE:注解
ElementType.PACKAGE:包
ElementType.TYPE_PARAMETER:键入参数声明
ElementType.TYPE_USE:使用类型
@Retention:用于描述注解的声明周期,参数类型是RetentionPolicy
RetentionPolicy.SOURCE:注释将被编译器丢弃
RetentionPolicy.CLASS:注释将由编译器记录在类文件中,但VM不需要在运行时保留
RetentionPolicy.RUNTIME:注释将由编译器记录在类文件中,并由VM在运行时保留,因此可以被反射读取
@Documented:说明该注解将被包含在JavaDoc中
@Interned:说明子类可以继承父类的注解
4、自定义注解?
自定义注解格式
//格式
public @interface 注解名{
//注解参数:参数类型 参数名() default 默认值;
}
//示例1:显示写出默认值
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface MyAnnotation{
String name() default "洪梦霞";
int id() default 0;
String[] hobby() default {"足球","篮球"};
}
//使用
@MyAnnotation()
public class Test{}
//示例2:不显示写出默认值
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface MyAnnotation{
String name();
int id();
String[] hobby();
}
//使用
@MyAnnotation(name="",id = 0,hobby = {"",""})
public class Test{}
注意点
参数类型只能是基本类型、class、String、enum
default 默认值,可显示写在注解参数列表中,也可不写,在使用注解时写出
如果只有一个参数成员,参数名一般使用value,这样在使用注解的使用可以省略不写value=
5、Java注解整理
5.1、JavaSE注解
@Override:定义在java.lang.Override中,只适用于修饰方法,表示一个方法声明打算重写超类中的另一个方法声明。
@Deprecated:定义在java.lang.Deprecated中,可以用来修饰属性、方法、类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择。
@SuppressWarnings:定义在java.lang.SuppressWarnings中,可以抑制编译时的警告信息
@SuppressWarnings("all")
@SuppressWarnings("unchecked")
@SuppressWarnings(value = {"unchecked","deprecation"})
@FunctionalInterface:函数式接口
@Resource(name = "",type = 类名.class):自动注入
可以写在字段和setter方法上,写在字段上,那么就不需要再写setter方法
@Resource默认按照ByName自动注入
5.2、Mybatis注解
@Param():
方法中只有一个参数,可加可不加,最好加,多个参数必须加
基本类型和String类型需要加上
和sql语句中引用的#{}相匹配
括号中用双引号("")包括简单的Sql语句,实现增删改查
@Select():
@Insert():
@Update():
@Delete():
5.3、Spring注解
@Component():把普通pojo实例化到spring容器中,相当于配置文件中的
@Repository():用于标注数据访问层
@Service():用于标注服务层
@Controller():用于标注控制层
@Configuration:
用于定义配置类,可替换xml配置文件
被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器
@Value(""):
放在属性上,给属性赋值,必须是String类型的属性
用来读取配置文件中的属性值并逐个注入Bean对象的对应属性中
@AutoWired:自动注入
@Autowired 等同于 @Autowired(required = true),表示注入的时候,该bean必须存在,否则就会注入失败。@Autowired(required = false),表示如果当前有bean直接注入,没有则跳过,不会报错。
可以写在字段和setter方法上,写在字段上,那么就不需要再写setter方法
@Autowired采取的策略为ByType
@Qualifier(value = ""):按照类型注入会产生一个问题,当一个类型有多个bean值的时候,会产生混乱,不知道具体注入哪一个,此时需要和@Qualifier(value = "")一起使用,‘value =’ 可以省略,实现唯一的注入
@Scope(""):指定bean的作用域
singleton,单例模式
prototype,原型模式
@Aspect:表明这是个切面
@Before()
切面执行前执行的方法
@Before("execution(* com.hmx.service.UserServiceImpl.*(..))")
@After()
切面执行后执行的方法
@After("execution(* com.hmx.service.UserServiceImpl.*(..))")
@Around()
在环绕增强中,我们可以给定一个参数,代表我们要获取处理切入的点
@Around("execution(* com.hmx.service.UserServiceImpl.*(..))")
@ComponentScan():让Spring扫描包,找到哪些bean被注入到了Spring容器内
5.4、SpringMVC注解
@Controller: 声明Spring类的实例是一个控制器
@ResponseBody:和@Controller配合使用,不会被解析资源,直接返回字符串
@RestController: @Controller和@ResponseBody两个注解合成功能
@RequestMapping():
映射url到控制器类或一个特定的处理程序方法,可用于类或者方法上
用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径
@PathVariable:让方法参数的值对应绑定到一个URL模板变量上
@RequestParam():将请求参数绑定到你控制器的方法参数上
5.5、SpringBoot注解
@SpringBootApplication:标注这个类是一个SpringBoot的应用
@SpringBootConfiguration:表示这是个SpringBoot配置类
@EnableAutoConfiguration:开启自动配置功能
@AutoConfigurationPackage:获取项目主程序启动类所在根目录,从而指定后续组件扫描器要扫描的包位置
@Import():向容器导入注册的所有组件
@ConfigurationProperties():
SpringBoot提供的注解
将配置文件中自定义的属性值批量注入某个Bean对象的多个对应属性中
要保证配置文件中的属性与对应实体类的属性名一致
@Value():SpringBoot框架默认继承了Spring的这个注解
@PropertySource():加载配置文件,指定自定义配置文件的位置和名字
@EnableConfigurationProperties:开启对应配置类的属性注入功能
@ImportResource:
加载XML配置文件
传统的Spring项目配置主要基于XML文件
SpringBoot框架默认不再使用XML文件配置项目,且XML文件不会加载到Spring容器中
@ImportResource注解标注在一个配置类上通常放在应用启动类上,使用时需要指定XML配置文件的路径和名称
@Profile:多配置文件环境配置
@Mapper:表示该类是一个Mybatis接口文件,并能被SpringBoot自动扫描到Spring容器中
5.6、SpringCloud注解
5.7、Mybatis-Plus注解