注解大全
springboot注解
@SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan。
@Configuration:提到@Configuration就要提到他的搭档@Bean。使用这两个注解就可以创建一个简单的spring配置类,可以用来替代相应的xml配置文件。
@EnableAutoConfiguration:能够自动配置spring的上下文,试图猜测和配置你想要的bean类,通常会自动根据你的类路径和你的bean定义自动配置
@AutoConfigureAfter:在指定的配置类初始化后再加载
@AutoConfigureBefore:在指定的配置类初始化前加载
@AutoConfigureOrder:数越小越先初始化
@ComponentScan:会自动扫描指定包下的全部标有@Component的类,并注册成bean,当然包括@Component下的子注解@Service,@Repository,@Controller。
@Entity 对实体注释。任何Hibernate映射对象都要有这个注释
@Table声明此对象映射到数据库的数据表,通过它可以为实体指定表(table),目录(Catalog)和schema的名字。该注释不是必须的,如果没有则系统使用默认值(实体的短类名)。
@EnableScheduling开启计划任务
1@Scheduled:声明该方法是一个计划任务,fixedRate属性设置每隔固定时间执行
2cron属性:按照指定时间执行(11时28)cron事unix和类unix(linux)系统下的定时时间
@WebServlet,在 SpringBootApplication 上使用@ServletComponentScan 注解后,Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,无需其他代码。
@Transactional
解决Transactional注解不回滚: 1. 检查你方法是不是public的。 2. 你的异常类型是不是unchecked异常。@Transactional(rollbackFor=Exception.class) 类似的还有norollbackFor,自定义不回滚的异常。 3. 数据库引擎要支持事务,如果是mysql,注意表要使用支持事务的引擎,比如innodb,如果是myisam,事务是不起作用的。 4. 是否开启了对注解的解析 <tx:annotation-driven transaction-manager="transactionManager" proxy-target class="true"/> 5. spring是否扫描到你这个包,如下是扫描到org.test下面的包<context:component-scan base-package="org.test" ></context:component-scan>
@Controller 用来响应页面,@Controller必须配合模版来使用。
@RestController Spring4之后新加入的注解,原来返回json需要@ResponseBody和@Controller配合。
@RequestBody 将接收的json数据装载到实体类中。
@RequestMapping 配置url映射
@PathVaribale 获取url中的数据
@RequestParam 获取请求参数的值
@RequestBody 用于接收实体类
@RequestAttribute 用于接收,被拦截后设置的属性
@GetMapping 组合注解
@PostConstruct与@PreDestroy详解及实例
@PostConstruct注释的方法,会在构造方法之后,init方法之前进行调用。
好多人以为是Spring提供的。其实是Java自己的注解。
Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)
只有一个方法可以使用此注释进行注解;
被注解方法不得有任何参数;
被注解方法返回值为void;
被注解方法不得抛出已检查异常;
被注解方法需是非静态方法;
此方法只会被执行一次;
PreDestroy 注释作为回调通知用于各方法,以表示该实例正处于被容器移除的过程中。用 PreDestroy 注释的方法通常用于释放它已持有的资源。
@PropertySource 注解可以从properties文件中,获取对应的key-value值,将其赋予变量;
@ConfigurationProperties的大致作用就是通过它可以把properties或者yml配置直接转成对象。
@RunWith:这个是指定使用的单元测试执行类,这里就指定的是SpringJUnit4ClassRunner.class;
@webservice:
类上加上@WebService注解
@WebMethod注解声明了这个方法是要发布出去的方法
@Resource 默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来注入。它有两个属性是比较重要的:
①. name: Spring 将 name 的属性值解析为 bean 的名称, 使用 byName 的自动注入策略 ②. type: Spring 将 type的属性值解析为 bean 的类型,使用 byType 的自动注入策略 注: 如果既不指定 name 属性又不指定 type 属性,Spring这时通过反射机制使用 byName 自动注入策略 @Resource 的装配顺序 1. 如果同时指定了 name 属性和 type 属性,那么 Spring 将从容器中找唯一匹配的 bean 进行装配,找不到则抛出异常 2. 如果指定了 name 属性值,则从容器中查找名称匹配的 bean 进行装配,找不到则抛出异常 3. 如果指定了 type 属性值,则从容器中查找类型匹配的唯一的 bean 进行装配,找不到或者找到多个都会抛出异常 4. 如果都不指定,则会自动按照 byName 方式进行装配, 如果没有匹配,则回退一个原始类型进行匹配,如果匹配则自动装配
@Autowried 默认是按照类型进行装配注入,默认情况下,它要求依赖对象必须存在,如果允许 null 值,可以设置它 required 为false。
如果我们想要按名称进行装配的话,可以添加一个 @Qualifier 注解解决。
demo @Autowried @Qualifier("adminDAO") private AdminDAO adminDAO;
@Async和@EnableAsync为异步注解,放到方法上,表示调用该方法的线程与此方法异步执行,需要配合注解使用。@EnableAsync放在启动类上,Async放在方法上。
@JsonInclude(Include.NON_NULL) 是springmvc中的标注,是为了控制返回的json字符串显示哪些字段。这里的设置是为null的字段不显示
@ConfigurationProperties(prefix = "sso") 可以在实体类中将properties文件的值注入到属性中。
@Conditional(TestCondition.class) 这句代码可以标注在类上面,表示该类下面的所有@Bean都会启用配置,也可以标注在方法上面,只是对该方法启用配置。
@RestControllerAdvice都是对Controller进行增强的,可以全局捕获spring mvc抛的异常。
作者:蓉漂里的小白
链接:https://www.jianshu.com/p/47aeeba6414c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
springcloud+spring注解
@@Conditional(TestCondition.class) 这句代码可以标注在类上面,表示该类下面的所有@Bean都会启用配置,也可以标注在方法上面,只是对该方法启用配置。
@ConditionalOnClass(某个class位于类路径上,才会实例化一个Bean)
@ConditionalOnExpression(当表达式为true的时候,才会实例化一个Bean)
@ConditionalOnMissingBean(仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean)
@ConditionalOnMissingClass(某个class类路径上不存在的时候,才会实例化一个Bean)
@ConditionalOnNotWebApplication(不是web应用)
@ConditionalOnWebApplication主要的用处是: 当Spring为web服务时,才使注解的类生效;通常是配置类;@ConditionalOnNotWebApplication(不是web应用)
@ConditionalOnClass(KafkaTemplate.class) 这个注解通俗的说就是Spring工程中引用了Kafka的包 才会构建这个bean,就是说只有在classpath下能找到kafkaTemplate类才会构建这个bean。
@RefreshScope springCloud配置热加载
@ConfigurationProperties("gateway")(表示使用配置文件中前缀为user1的属性的值初始化该bean定义产生的的bean实例的同名属性,在使用时这个定义产生的bean时,其属性name会是Tom,对应application.properties配置文件内容如下:user1.name=Tom)
@Order 注解@Order或者接口Ordered的作用是定义Spring IOC容器中Bean的执行顺序的优先级,而不是定义Bean的加载顺序,Bean的加载顺序不受@Order或Ordered接口的影响;