spring常用注解

组件注解

@Componet("xxx")

指定某个类是容器的bean@Component("xxx")相当于<bean id="xx"/>

用与标注类为spring容器bean的注解有四个,主要用于区别不同的类,并无实际上的不同

  • @component,用于标注一个普通bean
  • @Controller用于标注一个控制器类
  • @Service用于标注业务逻辑类(业务逻辑层Service)
  • @Repository用于标注DAO数据访问类

@Scope

@Scope该注解和@Component这一类注解联合使用,用于标记该类的作用域,默认是singletion.也可以和@Bean一起使用,此时@Scope修饰一个方法

@Lazy

指定bean是否延期初始化,相当于<bean id="xx"lazy-init="">默认为false.@Lazy可以和Component

lazy-init是Spring中延迟加载的bean属性.设置微lazy的bean将不会再Application启动时提前被实例化,而是第一次向容器通过getBena索取bean时初始化的

lazy-init只在scope为singleton时才会有效,如果scope的属性值为pototype,那么即使设置了lazy-init="false",容器启动时也不会被实例化

@PostConstructor和@PreDestory

@postConstructor和@PreDestory这俩个注解用于修饰方法,spring用这俩个注解管理容器中spring生命周期行为

  • PostConstructor从名字可以看出构造器之后调用,相当于<bean-init-method="">就是在依赖注入之后执行
  • @PreDestory容器销毁之前bean调用的方法的,相当于<bean destory-method>

@Resource

@Resource可以修饰成员变量也可以修饰set方法.当修饰成员变量可以不写set方法,此时spring直接使用jee规范的Field注入

@REsource有俩个属性name和type

  • 如果指定了name和type,则从Spring容器中找到唯一匹配的bean进行装配,找不到则抛出异常
  • 如果指定了name,则从spring容器查找名称(id)匹配的bean进行装配,找不到则抛出异常;
  • 如果指定了type,则从spring容器中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常;
  • 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配

如果都没有写:

  • 修饰成员变量,此时的name为成员变量的变量名
  • 修饰set方法,此时name位set方法去掉set后首字母小写后得到的字符串

@Autowired

@Autowired可以修饰构造器,成员变量,set方法,普通方法.@Autowired默认使用byType方式自动装配.required标记该类型的bean是否是noxious的,默认为必须存在(true)

可以配合@Qualifoer("xxx")实现按beanName注入

  • required=true(默认),为true时,从spring容器查找和指定类型匹配的bean,匹配不到或匹配多个则抛出异常
  • 使用@Qualifier("xxx"),则会从spring容器匹配类型和id一致的bean,匹配不到则抛出异常

@Autowired会根据修饰的成员变量选取出不同的类型

  • 修饰成员变量.按照类型注入对象
  • 修饰方法,构造器,给传入的参数按照类型注入值,当然可以有多个参数

配置类相关注解

@Bean(name="xxx")

修饰方法,该方法的返回值为spring容器中管理的bean.

@bean通常在@Configuration的配置类中,该注解的功能相当于<bean />元素

常用属性:

  • name:bean id.name可以省略,默认bean名称微方法名,也可以指定多个名称
  • autowired:是否自动注入,偶人Autowired.NO
  • init-Method:bean的初始化方法.在依赖注入之后执行<bean id="" init-method="">
  • destoryMethod:spring容器关闭时bean调用的方法<bean id="" destory-method="">

@Bea还可以配合@Scope指定bean的作用域

@ConfigurationProperties

springboot注解

用于从属性文件中获取值application.properties或者application.yml.

包含的属性

  • value|prefix 俩者互为别名.指定配置文件中属性的前缀
  • ignoreUnknownFields:默认为true.是否忽略为止字段,当实例中的字段在配置文件中不存在时,是忽略还是抛出异常
  • ignoreInvalidFields:默认为false.是否忽略不合法的字段,此处的不合法指类型不合适,配置文件中存在该配置但是无法转换为指定类型的字段

作用于类:隐式绑定,编写配置文件的时候需要对应字段与类的字段名称相同,这样就会将配置文件中的属性自动的用set方法进行注入

作用于方法:配置文件和new出来的对象中的属性保持一致,会将配置文件中的属性自动的用set方法进行注入

@import

功能和<import/>类似,修饰java类,用于向当前类导入其他配置类.可以导入多个配置文件

通常用于导入不在宝扫描范围内的配置文件.可以被扫描的配置类可以直接访问,没有必要用@import导入

参数为类的全限定名称

@ImportResource

修饰java类,用于引入xml文件

用于导入包含bean的配置文件,给你1和<import/>类似.默认情况下可以处理.groovy和xml的配置文件

参数为文件路径名称如@ImportResource({"classpath:config/beans.xml"})

@Value("${}")

修饰成员变量或者方法,构造器的参数用于属性值注入(在配置文件中配置的值)

@Value不能对static属性注入,可以配合@PropertySource一起使用

@PropertySource("classpath:jdbc.properties")

该注解用来加载属性文件

常用属性

  • ignoreResourceNotFound:当资源文件找不到的是时候,是否会忽略该配置,而不是抛出错误.默认为false
  • encoding:资源文件使用什么编码方式
  • value:指定属性文件位置.可以配置多个属性文件

他与@configuration不同,差异如下

  • @ProertySource使用该注解加载的是相对独立的属性文件,可以同时加载多个文件,而且不支持自动注入
  • @ConfigurationProperties用于加载配置文件

    • 支持前缀注入(prefix)
    • 相同属性名的自动注入
    • $("")支持el表达式

通过@value注解将配置文件的值注入到实体类当中

@Configuration
@PropertySource("classpath:jdbc.properties")
@Data
public class JdbcProperties {
    @Value("${spring.datasource.maxActive}")
    private String url;

    @Value("${spring.datasource.maxActive}")
    private String type;
    ..............................
    
}

springmvc相关注解

@ResponseBody

在参数前添加注解

Response返回内容会使用HttpMessageConverter转换。通常会转换成json类型

@RestController

等价于@Controller+@ResponseBody

@RequestBody

从Request请求中获取具体内容,绑定到方法的指定参数上,springmvc使用

@RequestBody

从Request请求体重获取内容,绑定到方法指定的参数上,SpringMVC使用HttpMessageConverter接口将请求体重的数据转换为方法参数类型

@RequestParam

从request请求中获取指定的参数

可以设置的属性

  • required:默认为true参数必须存在.参数不存在报异常
  • defaultValue:设置参数默认值.只有在Required设置为false,才会生效
  • name|value:关联的参数名称.

@PathVariable

获取页面请求url动态参数的

  • required:默认为true参数必须存在.参数不存在报异常
  • name|value:关联的参数名称.

@RequestMapping

@requestMaping是一个用来请求地址映射的注解,可以作用域类或方法上.作用域类上表示类中的所有响应请求都是以改地址作为父路径

  • value:指定请求的实际地址,指定的地址
  • method:指定请求的method类型,get,post,put,delete等不填就可以解析全部改路径的请求
Last modification:April 20, 2022
如果觉得我的文章对你有用,请随意赞赏