一、启动注解 @SpringBootApplication@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFi...
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public@interfaceSpringBootApplication{
}
查看源码可发现, @SpringBootApplication
是一个复合注解,包含了 @SpringBootConfiguration
, @EnableAutoConfiguration`,
@ComponentScan` 这三个注解
`@SpringBootConfiguration
注解,继承 @Configuration
注解,主要用于加载配置文件 @SpringBootConfiguration
继承自 @Configuration
,二者功能也一致,标注当前类是配置类, 并会将当前类内声明的一个或多个以 @Bean 注解标记的方法的实例纳入到 spring 容器中,并且实例名就是方法名。
@EnableAutoConfiguration
注解,开启自动配置功能 @EnableAutoConfiguration
可以帮助 SpringBoot 应用将所有符合条件的 @Configuration
配置都加载到当前 SpringBoot 创建并使用的 IoC 容器。借助于 Spring 框架原有的一个工具类:SpringFactoriesLoader 的支持, @EnableAutoConfiguration
可以智能的自动配置功效才得以大功告成
@ComponentScan
注解,主要用于组件扫描和自动装配 @ComponentScan
的功能其实就是自动扫描并加载符合条件的组件或 bean 定义,最终将这些 bean 定义加载到容器中。我们可以通过 basePackages 等属性指定 @ComponentScan
自动扫描的范围,如果不指定,则默认 Spring 框架实现从声明 @ComponentScan
所在类的 package 进行扫描,默认情况下是不指定的,所以 SpringBoot 的启动类最好放在 root package 下。
控制器,处理 http 请求。
查看 @RestController 源码
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public@interfaceRestController{
@AliasFor(annotation = Controller.class)
String value() default"";
}
从源码我们知道, @RestController
注解相当于 @ResponseBody
+ @Controller
合在一起的作用, RestController 使用的效果是将方法返回的对象直接在浏览器上展示成 json 格式.
通过 HttpMessageConverter 读取 Request Body 并反序列化为 Object(泛指)对象
@RequestMapping 是 Spring Web 应用程序中最常被用到的注解之一。这个注解会将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上
注解简写:@RequestMapping(value = "/say",method = RequestMethod.GET) 等价于:@GetMapping(value = "/say")
GetMapping 源码
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(method = RequestMethod.GET)
public@interfaceGetMapping{
}
是 @RequestMapping(method = RequestMethod.GET) 的缩写
@PostMapping 用于将 HTTP post 请求映射到特定处理程序的方法注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(method = RequestMethod.POST)
public@interfacePostMapping{
}
是 @RequestMapping(method = RequestMethod.POST) 的缩写
@PathVariable: 获取 url 中的数据
@Controller
@RequestMapping("/User")
publicclassHelloWorldController{
@RequestMapping("/getUser/{uid}")
publicString getUser(@PathVariable("uid")Integer id, Model model) {
System.out.println("id:"+id);
return"user";
}
}
请求示例:http://localhost:8080/User/getUser/123
@Controller
@RequestMapping("/User")
publicclassHelloWorldController{
@RequestMapping("/getUser")
publicString getUser(@RequestParam("uid")Integer id, Model model) {
System.out.println("id:"+id);
return"user";
}
}
请求示例:http://localhost:8080/User/getUser?uid=123
@Repository DAO 层注解,DAO 层中接口继承 JpaRepository, 需要在 build.gradle 中引入相关 jpa 的一个 jar 自动加载。
Repository 注解源码
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public@interfaceRepository{
@AliasFor(annotation = Component.class)
String value() default"";
}
@Service
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public@interfaceService{
@AliasFor(annotation = Component.class)
String value() default"";
}
@Service 是 @Component 注解的一个特例,作用在类上 @Service 注解作用域默认为单例 使用注解配置和类路径扫描时,被 @Service 注解标注的类会被 Spring 扫描并注册为 Bean @Service 用于标注服务层组件, 表示定义一个 bean @Service 使用时没有传参数,Bean 名称默认为当前类的类名,首字母小写 @Service(“serviceBeanId”) 或 @Service(value=”serviceBeanId”) 使用时传参数,使用 value 作为 Bean 名字 @Scope 作用域注解 @Scope 作用在类上和方法上,用来配置 spring bean 的作用域,它标识 bean 的作用域
@Scope 源码
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public@interfaceScope{
@AliasFor("scopeName")
String value() default"";
@AliasFor("value")
String scopeName() default"";
ScopedProxyMode proxyMode() defaultScopedProxyMode.DEFAULT;
}
value
singleton 表示该 bean 是单例的。(默认)
prototype 表示该 bean 是多例的,即每次使用该 bean 时都会新建一个对象。
request 在一次 http 请求中,一个 bean 对应一个实例。
session 在一个 httpSession 中,一个 bean 对应一个实例。
proxyMode
DEFAULT 不使用代理。(默认)
NO 不使用代理,等价于 DEFAULT。
INTERFACES 使用基于接口的代理 (jdk dynamic proxy)。
TARGET_CLASS 使用基于类的代理 (cglib)。
@Entity 实体类注解
@Table(name ="数据库表名"),这个注解也注释在实体类上,对应数据库中相应的表。
@Id、@Column 注解用于标注实体类中的字段,pk 字段标注为 @Id,其余 @Column。
@Bean 产生一个 bean 的方法
@Bean 明确地指示了一种方法,产生一个 bean 的方法,并且交给 Spring 容器管理。支持别名 @Bean("xx-name")
@Autowired 自动导入
@Autowired 注解作用在构造函数、方法、方法参数、类字段以及注解上
@Autowired 注解可以实现 Bean 的自动注入
@Component 把普通 pojo 实例化到 spring 容器中,相当于配置文件中的
虽然有了 @Autowired, 但是我们还是要写一堆 bean 的配置文件, 相当麻烦, 而 @Component 就是告诉 spring, 我是 pojo 类, 把我注册到容器中吧, spring 会自动提取相关信息。那么我们就不用写麻烦的 xml 配置文件了
引入单个 properties 文件:
@PropertySource(value = {"classpath : xxxx/xxx.properties"})
引入多个 properties 文件:
@PropertySource(value = {"classpath : xxxx/xxx.properties","classpath : xxxx.properties"})
可以额外分为两种模式 相对路径 classpath,绝对路径(真实路径)file
注意:单文件可以不写 value 或 locations,value 和 locations 都可用
相对路径(classpath)
引入单个 xml 配置文件:@ImportSource("classpath : xxx/xxxx.xml")
引入多个 xml 配置文件:@ImportSource(locations={"classpath : xxxx.xml" , "classpath : yyyy.xml"})
绝对路径(file)
引入单个 xml 配置文件:@ImportSource(locations= {"file : d:/hellxz/dubbo.xml"})
引入多个 xml 配置文件:@ImportSource(locations= {"file : d:/hellxz/application.xml" , "file : d:/hellxz/dubbo.xml"})
@Value("${properties 中的键}") private String xxx;
功能类似 XML 配置的,用来导入配置类,可以导入带有 @Configuration 注解的配置类或实现了 ImportSelector/ImportBeanDefinitionRegistrar。
使用示例
@SpringBootApplication@Import({SmsConfig.class})publicclassDemoApplication{publicstaticvoid main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}
在 Spring 中,事务有两种实现方式,分别是编程式事务管理和声明式事务管理两种方式
编程式事务管理:编程式事务管理使用 TransactionTemplate 或者直接使用底层的 PlatformTransactionManager。对于编程式事务管理,spring 推荐使用 TransactionTemplate。声明式事务管理:建立在 AOP 之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务,通过 @Transactional 就可以进行事务操作,更快捷而且简单。推荐使用
@ControllerAdvice 统一处理异常
@ControllerAdvice 注解定义全局异常处理类
@ControllerAdvice
publicclassGlobalExceptionHandler{
}
@ExceptionHandler注解声明异常处理方法
@ControllerAdvice
publicclassGlobalExceptionHandler{
@ExceptionHandler(Exception.class)
@ResponseBody
String handleException(){
return"Exception Deal!";
}
}
来源:本文内容搜集或转自各大网络平台,并已注明来源、出处,如果转载侵犯您的版权或非授权发布,请联系小编,我们会及时审核处理。
声明:江苏教育黄页对文中观点保持中立,对所包含内容的准确性、可靠性或者完整性不提供任何明示或暗示的保证,不对文章观点负责,仅作分享之用,文章版权及插图属于原作者。
Copyright©2013-2024 JSedu114 All Rights Reserved. 江苏教育信息综合发布查询平台保留所有权利
苏公网安备32010402000125 苏ICP备14051488号-3技术支持:南京博盛蓝睿网络科技有限公司
南京思必达教育科技有限公司版权所有 百度统计