spring 注解开发
@SpringBootApplication:包含了
@ComponentScan @Configuration @EnableAutoConfiguration注解 其中@ComponentScan让spring Boot扫描到Configuration类并把它加入到程序上下文。
注解参数 参数类型 注解参数默认值 注解参数意义 exclude class 数组 {} 指定排除哪些类 excludeName string 数组 {} 指定哪些名字的bean被排除 basePackages string 数组 {} 指定扫描哪些包下面的class basePackageClasses class 数组 {} 指定扫描包里面的指定类进行加载
@Configuration 等同于spring的XML配置文件;使用Java代码可以检查类型安全。
注解参数 参数类型 注解参数默认值 注解参数意义 value string “” 代表该配置类注入容器中的名字,如果为 ""的话则为类名字且第一个字母小写
@EnableAutoConfiguration 自动配置。
注解参数 参数类型 注解参数默认值 注解参数意义 exclude class数组 {} 排除哪些类不扫描 excludeName string 数组 {} 指定哪些名字为指定的名字的bean不被注入
@ComponentScan 组件扫描,可自动发现和装配一些Bean。
注解参数 参数类型 注解参数默认值 注解参数意义 value string basePackages 默认扫描启动类下面的所有组件bean basePackages string basePackages 默认扫描启动类下面的所有组件bean basePackageClasses class 数组 {} {@link #basePackages}的类型安全替代方案,用于指定包扫描带注释的组件。 将扫描指定的每个类的包。 考虑在每个包中创建一个特殊的无操作标记类或接口
nameGenerator BeanNameGenerator 接口实现类 BeanNameGenerator {@link BeanNameGenerator}类,用于命名检测到的组件在Spring容器内。 scopeResolver ScopeMetadataResolver接口实现类 AnnotationScopeMetadataResolver.class {@link ScopeMetadataResolver}用于解析检测到的组件的范围。 resourcePattern string ××/×.class 正则表达式确定扫描的类 useDefaultFilters boolean true 是否使用默认的过滤器扫描bean includeFilters Filter注解 {} 指定使用哪些类,可以自定义注解并引用该参数引入到spring的扫描中,然后注入容器中 excludeFilters Filter注解 {} 指定排除哪些类,用于指定如何排除bean的规则 lazyInit boolean false 是否启动懒加载
@Component可配合CommandLineRunner使用,在程序启动后执行一些基础任务。
注解参数 参数类型 注解参数默认值 注解参数意义 value string “” 该bean组件的名字
@Slf4j 日志注解
注解参数 参数类型 注解参数默认值 注解参数意义 topic 日志类型 “” 设置构造的Logger的类别。 默认情况下,它将使用放置注释的类型。
@RestController注解是@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器。
注解参数 参数类型 注解参数默认值 注解参数意义 value string “” 该bean组件的名字
@Autowired自动导入,按类型装配。默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用
注意事项: 在使用@Autowired时,首先在容器中查询对应类型的bean 如果查询结果刚好为一个,就将该bean装配给@Autowired指定的数据 如果查询的结果不止一个,那么@Autowired会根据名称来查找。 如果查询的结果为空,那么会抛出异常。解决方法时,使用required=false
注解参数 参数类型 注解参数默认值 注解参数意义 required boolean true 是否必须注入到容器中,如果未false则入股没有注入到容器中并不报错,否则报错
@Resource(这个注解属于J2EE的),默认安照名称进行装配,名称可以通过name属性进行指定, 如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在setter方法上默认取属性名进行装配。 当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
注解参数 参数类型 注解参数默认值 注解参数意义 name string “” 资源的JNDI名称。 对于字段注释,默认为字段名称。 对于方法注释,默认值是JavaBeans属性名称对应方法。 对于类注释,没有默认值并且必须指定。 lookup string “” 引用指向的资源的名称。 它可以使用全局JNDI名称链接到任何兼容资源。 type class java.lang.Object.class 资源的Java类型。 对于字段注释,默认值是字段的类型。 对于方法注释,缺省值是JavaBeans属性的类型。对于类注释,没有默认值,这必须是指定。 authenticationType AuthenticationType AuthenticationType.CONTAINER; 用于此资源的身份验证类型。这可以为表示a的资源指定任何支持类型的连接工厂,必须不为其他类型的资源指定。 shareable boolean true 指示是否可以在此组件与其他组件之间共享此资源。可以为表示任何受支持类型的连接工厂的资源指定此资源,并且不得为其他类型的资源指定此资源。 mappedName String “” 此资源应映射到的产品特定名称。 description string “” 描述该资源
@PathVariable获取参数。
注解参数 参数类型 注解参数默认值 注解参数意义 value/name string “” 在请求url路径中获取数据,且在映射路径中可以使用正则表达式验证参数值是否符合要求 required boolean true 是否必须有这个参数值
@JsonBackReference解决嵌套外链问题。
@JsonBackReference标注的属性在序列化(serialization,即将对象转换为json数据)时,会被忽略(即结果中的json数据不包含该属性的内容)
@JsonBackReference的作用相当于@JsonIgnore,此时可以没有@JsonManagedReference。但在反序列化(deserialization,即json数据转换为对象)时,如果没有@JsonManagedReference,则不会自动注入
@JsonBackReference标注的属性(被忽略的父或子);如果有@JsonManagedReference,则会自动注入自动注入@JsonBackReference标注的属性。
@JsonIgnore:直接忽略某个属性,以断开无限递归,序列化或反序列化均忽略。当然如果标注在get、set方法中,则可以分开控制,序列化对应的是get方法,反序列化对应的是set方法。在父子关系中,当反序列化时,@JsonIgnore不会自动注入被忽略的属性值(父或子),这是它跟@JsonBackReference和@JsonManagedReference最大的区别。
@Bean 用于注入一个bean
注解参数 参数类型 注解参数默认值 注解参数意义 name/value string “” 注入bean的名字,如果是默认值则为注入时方法的名字 autowire Autowire Autowire.NO 是否通过名称或类型通过基于约定的自动装配注入依赖项,请注意,此自动装配模式仅基于外部驱动的自动装配按照约定在bean属性setter方法上,类似于XML bean定义。默认模式允许注释驱动的自动装配。 “不”是指仅外部驱动自动装配,不影响任何自动装配要求bean类本身通过注释表达 initMethod String ”“ 初始化期间在bean实例上调用的方法的可选名称。不常用,因为可以直接以编程方式调用该方法在Bean注释方法的主体内。默认值为{@code“”},表示不调用init方法。 destroyMethod string “” 关闭时调用bean实例的方法的可选名称
@Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean。
参考url: https://blog.csdn.net/xcy1193068639/article/details/81491071 派生类为:
@ConditionalOnMissingBean @ConditionalOnNotWebApplication @ConditionalOnProperty @ConditionalOnBean @ConditionalOnClass @ConditionalOnCloudPlatform(value = CloudPlatform.CLOUD_FOUNDRY) @ConditionalOnJava(value = ConditionalOnJava.JavaVersion.EIGHT) @ConditionalOnJndi @ConditionalOnResource @ConditionalOnEnabledResourceChain @ConditionalOnWebApplication @Scope:注解在类上,描述spring容器如何创建Bean实例。
注解参数 参数类型 注解参数默认值 注解参数意义 value/scopeName string “” singleton: 表示在spring容器中的单例,通过spring容器获得该bean时总是返回唯一的实例,prototype:表示每次获得bean都会生成一个新的对象,request:表示在一次http请求内有效(只适用于web应用),session:表示在一个用户会话内有效(只适用于web应用),globalSession:表示在全局会话内有效(只适用于web应用) proxyMode ScopedProxyMode ScopedProxyMode.DEFAULT 指定是否应将组件配置为范围代理,如果是,则代理应该是基于接口还是基于子类,默认为{@link ScopedProxyMode#DEFAULT},通常表示除非有不同的默认值,否则不应创建范围代理
@Value 注解在变量上,从配置文件中读取,读取是由加载顺序的,如果为空请判断是否该bean加载是否提前了
注解参数 参数类型 注解参数默认值 注解参数意义 value string 无默认,必填 在配置文件中的位置
@ConfigurationProperties 赋值,将注解转换成对象。给对象赋值。
注解参数 参数类型 注解参数默认值 注解参数意义 prefix/value string “” 在配置文件中的位置 ignoreInvalidFields boolean false 标记表示绑定到此对象时应忽略无效字段。 ignoreNestedProperties boolean false 标记表示绑定到此对象的字段中包含句点 名称应该被忽略 ignoreUnknownFields boolean true 标记表示绑定到此对象时应忽略未知字段。未知字段可能是属性中出错的标志。 exceptionIfInvalid boolean true 标记表示如果可以使用Validator,则应引发异常,该类使用{@link Validated @Validated}注释,验证失败。 如果它设置为false,将吞下验证错误。 他们将被记录,但是不传播给调用者
@JsonView json工具类
使用方法
@Data
public class User {
public interface SimpleUser { }
public interface DetailUser extends SimpleUser { }
@JsonView ( value = SimpleUser. class )
private Integer age;
@JsonView ( value = SimpleUser. class )
@JsonBackReference
private String name;
@JsonView ( value = DetailUser. class )
private String password;
public static void main ( String[ ] args) throws IOException {
ObjectMapper objectMapper = new ObjectMapper ( ) ;
User user = new User ( ) ;
user. setAge ( 10 ) ;
user. setName ( "zhangpei" ) ;
user. setPassword ( "dfafafafas" ) ;
ByteArrayOutputStream bos = new ByteArrayOutputStream ( ) ;
objectMapper. writerWithView ( User. DetailUser. class ) . writeValue ( bos, user) ;
System. out. println ( bos. toString ( ) ) ;
bos. reset ( ) ;
objectMapper. writerWithView ( User. SimpleUser. class ) . writeValue ( bos, user) ;
System. out. println ( bos. toString ( ) ) ;
}
}
注解参数 参数类型 注解参数默认值 注解参数意义 value class数组 {} 指定该json属于哪个类
@RestControllerAdvice rest服务中controller异常处理方法类
注解参数 参数类型 注解参数默认值 注解参数意义 basePackages/value string 数组 {} 扫描的基础包
@GuardedBy(value = “lock”) 对象被哪个锁保护着需要同步,只是一个标识
注解参数 参数类型 注解参数默认值 注解参数意义 value string 必填 1. @GuardedBy( “this” ) 受对象内部锁保护 @GuardedBy( “fieldName” ) 受 与fieldName引用相关联的锁 保护 2. @GuardedBy( “ClassName.fieldName” ) 受 一个类的静态field的锁 保存 3. @GuardedBy( “methodName()” ) 锁对象是 methodName() 方法的返值,受这个锁保护。 4. @GuardedBy( “ClassName.class” ) 受 ClassName类的直接锁对象保护。而不是这个类的某个
@FrameworkEndpoint @Controller的同义词,但仅用于框架提供的端点(因此它永远不会与用@Controller定义的用户自己的端点冲突)。