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等不填就可以解析全部改路径的请求