springBoot项目相关注解
spring相关注解
-
IoC相关注解
@Component: 类似于<bean>, 没有实际业务含义 @Repository: 是@Component的子注解, 功能和@Component完全一样, 但是有业务含义, 使用该注解描述的代码表示数据访问对象, 俗称DAO. @Service: 是@Component的子注解, 功能和@Component完全一样, 但是有业务含义, 使用该注解描述的代码表示服务对象, 俗称Service. @Controller: 是@Component的子注解, 功能和@Component完全一样, 但是有业务含义, 使用该注解描述的代码表示控制器对象, 俗称Controller. @Scope: 类似于<bean>中的scope属性. 取值有: singleton, prototype, request, session, global session, application.
-
DI相关注解
@AutoWired: 是spring提供的注解, 默认先按类型进行注入, 如果找到则注入, 找不到再按照名称进行注入; 如果找到多个匹配的类型, 抛出异常. @Resource: 是javax.annotation包中提供的注解, 默认先按照名称注入, 名称一致则注入, 如果没有同名的, 再按照类型注入. @Value: 用于读取properties资源文件中的数据, 并为其描述的属性赋值.
-
切面(AOP)相关注解
@Aspect 声明一个切面 @After 在方法执行之后执行(方法上) @Before 在方法执行之前执行(方法上) @Around 在方法执行之前与之后执行(方法上) @PointCut 声明切点
-
@Bean注解(相当于xml配置中的
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
标签,让spring帮我们创建对象并管理的配置)- @Bean(name = "someBean",initMethod = "init",destroyMethod = "destroy")这个和标签配置方式一样,分别代表被创建,被初始化和被销毁
- 我们贴@Bean注解的时候一定要被扫描到,注解才能生效(一般配合@ComponentScan使用,这个注解可以指定扫描的路径,如果不指定,那么就在@ComponentScan注解所贴类的所在包及其子包进行扫描)
- @Bean有个scope属性,@scope要单独贴一下,它是表示该bean的作用情况Singleton(单例,一个spring容器中只有一个,也是我们默认使用的);Protetype(每次调用创建一个新bean);Request(web项目中,给每个HTTPrequest新建一个bean);Session(web项目中,给每个http session新建一个bean);GlobalSession(给每一个 global http session新建一个Bean实例)
- bean对象里面有其他bean对象作为属性注入时,例如在SomeBean类中有属性OtherBean
@Configuration //组件扫描件标签,如果不指定basePackages,那么默认是扫描当前类所在包及其子包 @ComponentScan() public class AppConfig { @Bean public OtherBean otherBean(){ return new OtherBean(); } //方式一 @Bean public SomeBean someBean(){ SomeBean someBean = new SomeBean(); /*注意,这里设置的otherbean一定不能自己new,否则拿到的就不是spring容器里的 ,而要直接调用otherBean() */ someBean.setOtherBean(otherBean()); return someBean; } //方式二 @Bean public SomeBean someBean(OtherBean otherBean){ //该方式是直接定义参数去接收OtherBean,spring容器会自动帮我们创建好 //ohernbean并传过来 SomeBean someBean = new SomeBean(); someBean.setOtherBean(otherBean); return someBean; } }
-
@Value注解
- 支持如下方式的注入:
- 注入普通字符
- 注入操作系统属性
- 注入表达式结果
- 注入其它bean属性
- 注入文件资源
- 注入网站资源
- 注入配置文件
- @Value三种情况的用法。
- ${}是去找外部配置的参数,将值赋过来
- #{}是SpEL表达式,去寻找对应变量的内容
- #{}直接写字符串就是将字符串的值注入进去
- 支持如下方式的注入:
SpringMVC常用注解
-
@EnableWebMvc在配置类中开启WebMVC的配置支持。
-
@Controller
-
@RequestMapping用于映射web请求,包括访问路径和参数。
-
@ResponseBody支持将返回值放到response内,而不是一个页面,通常用户返回json数据。
-
@RequestBody允许request的参数在request体中,而不是在直接连接的地址后面。(放在参数前)
-
@PathVariable用于接收路径参数,比如@RequestMapping(“/hello/{name}”)声明的路径,将注解放在参数前,即可获取该值,通常作为Restful的接口实现方法。
-
@RestController
该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody。 -
@ControllerAdvice(控制器增强)
- 全局异常处理
- 全局数据绑定
- 全局数据预处理
ControllerAdvice的常用场景
-
@ExceptionHandler(RuntimeException.class)用于全局处理控制器里的异常。这里表示的是处理runtime类型的异常
-
@InitBinder
用来设置WebDataBinder,WebDataBinder用来自动绑定前台请求参数到Model中。 -
@ModelAttribute
(1)@ModelAttribute注释方法
如果把@ModelAttribute放在方法的注解上时,代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法。可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。比如权限的验证(也可以使用Interceptor)等。(2)@ModelAttribute注释一个方法的参数
当作为方法的参数使用,指示的参数应该从模型中检索。如果不存在,它应该首先实例化,然后添加到模型中,一旦出现在模型中,参数字段应该从具有匹配名称的所有请求参数中填充。(说人话就是@ModelAttribute注解的参数要被实例化,并且添加到model中,同时还可以给实例化的像取个名字) -
@Transactional (事务),可以这样用
@Transactional(propagation= Propagation.SUPPORTS,readOnly=true)
- @Transactional 注解的属性信息
-
属性名 说明 name 当在配置文件中有多个 TransactionManager , 可以用该属性指定选择哪个事务管理器。 propagation 事务的传播行为,默认值为 REQUIRED。 isolation 事务的隔离度,默认值采用 DEFAULT。 timeout 事务的超时时间,默认值为-1。如果超过该时间限制但事务还没有完成,则自动回滚事务。 read-only 指定事务是否为只读事务,默认值为 false;为了忽略那些不需要事务的方法,比如读取数据,可以设置 read-only 为 true。 rollback-for 用于指定能够触发事务回滚的异常类型,如果有多个异常类型需要指定,各类型之间可以通过逗号分隔。 no-rollback- for 抛出 no-rollback-for 指定的异常类型,不回滚事务。
-
- @Transactional 注解的属性信息
springBoot中用到的其他一些注解
- @configuration:贴了这个注解就表示当前类为配置类(类似于xml,可以配置各种bean等)
- @Import:可以用于导入其他的配置类,例如:
@Import(OtherConfig.class)
- @ImportResource:配置文件导入注解,例如:
@ImportResource("classpath:applicationContext.xml")
- 测试相关
@RunWith(SpringRunner.class) @ContextConfiguration(classes = {AppConfig.class})
这两个是配合使用的,runwith是运行器,如果里面放入JUnit4.class,就表示用JUnit4来运行ContextConfiguration可以传入配置类,或者配置文件 - @PropertySource:资源文件加载配置注解,用于将properties类型文件加载到spring容器中,贴在类上(
@PropertySource("classpath:db.properties")
)就类似于如下效果
<context:property-placeholder location="classpath:db.perperties"/>
- @SpringBootApplication启动类注解,贴了这个注解的类就成为了启动类,一般springBoot项目就只有一个启动类,启动类都是配置类
- @Slf4j这是lombok提供的日志注解,等价于
private static final Logger log = LoggerFactory.getLogger(当前类.class);
- @MapperScan:mapper扫描注解,用来帮忙创建mapper接口的动态代理实现类,因为其是作用于接口的,所以配置的时候一定要配到mapper包(@MapperScan("cn.sushen.crm.mapper")),否则可能把其他的接口也创建了代理实现类
- @RequestParam:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)
@RequestMapping("show16") public ModelAndView test16(@RequestParam("name")String name) { //@RequestParam("name")里面的参数name必须和请求传过来的参数一致,即 //传过来的也要为name,但是后面接收的String name可以不必为name,因为是 //将@RequestParam取到的值,赋值给后面的形参 ModelAndView mv = new ModelAndView(); mv.setViewName("hello2"); mv.addObject("msg", "接收普通的请求参数:" + name); return mv; }
- @ConfigurationProperties:批量绑定属性,从application.properties里面批量取出属性,进行绑定,绑定到的自定义的类定义的属性必须和application.properties里面的名称一致(便可实现自动绑定)
@Component @ToString @Setter @Getter @ConfigurationProperties("jdbc") //相当于 @ConfigurationProperties(prefix="jdbc") public class MyData { private String username; private String password; } //或者在配置类中自动绑定 @Bean @ConfigurationProperties("jdbc") public MyData myData() { return new MyData(); }
- @PathVariable("xxx"):通过 @PathVariable 可以将URL中占位符参数{xxx}绑定到处理器类的方法形参中@PathVariable(“xxx“),例如:
@RequestMapping("show/{id}/{name}") //@RequestMapping和@PathVariable里面的占位符名称必须一样(这里对应的 //是id和name),这样访问localhost/show/112/java路径,那么在test5方法中就 //能拿到对应的id=112,name=java public ModelAndView test5(@PathVariable("id") Long ids ,@PathVariable("name") String names){ ModelAndView mv = new ModelAndView(); mv.addObject("msg","占位符映射:id:"+ids+";name:"+names); mv.setViewName("hello2"); return mv; }
- 【Java用法】Java程序中@Valid注解是什么以及@Valid注解的用法_No8g攻城狮的博客-CSDN博客
网友评论