本文目前借鉴了 https://blog.csdn.net/ght886/article/details/81251919以及自己搜索的一些解释,力求一句话解释清楚。(因为不知道文章最早是谁发的,这个是目前找到最早发的了,若是发现原作者请告知)此文只是根据我个人在开发中常用的配置来写的,若您发现有文章有不对或需要补充的地方请指明,谢谢。
Spring framework部分
- 声明Bean的注解
(Bean因为在使用的时候要将类实例化,Bean就是类代理或代言人,将类实例化,实际上确实是通过反射、代理来实现的)
@Component 组件
在配置组件或不太好分类的时候用@Component
@Service 在业务逻辑层使用
用于标注业务层组件(service层),用注解的方式把这个类注入到spring的工厂中,若不自定义Service的名字,则他会自动配置为当前类的名字(符合驼峰规则)。
@Repository 在数据访问层使用
用于标注数据访问组件(dao层),即DAO组件
@Controller 在展现层使用,控制器的声明
标识一个该类是Spring MVC controller处理器,用来创建处理http请求的对象 - 注入Bean的注解
(就是将有下述标记的方法/属性放入Bean工厂当中,让工厂来统一控制)
@Autowired @Inject @Resource
因为这三个的使用方法一致,我就在这里不一一赘述了,都是将方法或属性放入Bean工厂,我一般使用的是@Resource,它可以默认将属性的名字设置为你写的名字。例如:
在使用的时候直接用channelDao。
@Resource
ChannelDao channelDao;
- java配置类相关注解
(在使用零配置的时候的注解)
@Configuration
该类等价与XML中配置beans,相当于Ioc容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean,与xml中配置的Bean意思一样。
@Bean
告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次(可以通过改配置取消单一模式,默认是单一模式),随后这个Spring将会将这个Bean对象放在自己的IOC容器中。
@ComponentScan
该注解默认会扫描该类所在的包下所有的配置类。
@WishlyConfiguration
为@Configuration与@ComponentScan的组合注解,可以替代这两个注解。 - 切面(AOP)相关注解
Spring支持AspectJ的注解式切面编程。
@Aspect
声明一个切面类,有该注释的就是剖面。
@Pointcut:
Pointcut是植入Advice的触发条件。每个Pointcut的定义包括2部分,一是表达式,二是方法签名。方法签名必须是 public及void型。可以将Pointcut中的方法看作是一个被Advice引用的助记符,因为表达式不直观,因此我们可以通过方法签名的方式为 此表达式命名。因此Pointcut中的方法只需要方法签名,而不需要在方法体内编写实际代码。
@Around:环绕
@AfterReturning:后置增强,方法正常退出时执行
@Before:标识一个前置增强方法
@AfterThrowing: 异常抛出
@After: 不管是抛出异常或者正常退出都会执行 - @Bean的属性支持(就是设置Bean的属性)
@Scope
设置Spring容器如何新建Bean实例(方法上,得有@Bean)
其设置类型包括:
Singleton (单例,一个Spring容器中只有一个bean实例,默认模式),
Protetype (每次调用新建一个bean),
Request (web项目中,给每个http request新建一个bean),
Session (web项目中,给每个http session新建一个bean),
GlobalSession(给每一个 global http session新建一个Bean实例)
- @Value:
(我在使用的时候是配合着 @PropertySource(" classpath:application.properties ") 一起使用,中间的字符串是配置文件的路径。@PropertySource是加载指定的属性文件(*.properties)到 Spring 的 Environment 中。)
配置文件@Value("${jdbc.driverClass}") private String driverClass; @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String username; @Value("${jdbc.password}") private String password;
jdbc.driverClass=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/cms jdbc.username=root jdbc.password=123456
- @Enable*注解说明
这些注解主要用来开启对xxx的支持。
@EnableAspectJAutoProxy
开启对AspectJ自动代理的支持
@EnableAsync
开启异步方法的支持
@EnableScheduling
开启计划任务的支持
@EnableConfigurationProperties
开启对@ConfigurationProperties注解配置Bean的支持
@EnableJpaRepositories
开启对SpringData JPA Repository的支持
@EnableTransactionManagement
开启注解式事务的支持
@EnableCaching
开启注解式的缓存支持
SpringMVC部分
- @EnableTransactionManagement
开启注解式事务的支持,启用事务管理,在类里面去扫描,拦截有 @Transactional 注解的类或方法,给他进行代理。 - @EnableWebMvc
开启Web MVC的配置支持,在使用的时候会读取 application.properties 或 application.yml 文件中的配置。 - @RequestMapping
使用@RequestMapping 注解映射请求路径,写在controller中。 - @RestController
这个注解相当于@Controller,@RequestBody,@ResponseBody三个注解的集合,只要在类前添加这个注解,这三个注解都不用再配置。并且所有方法响应的对象都会转换json串并响应到客户端
Spring Boot部分
- @ConfigurationProperties
用于放在需要自动装配的类的上面。 - @EnableConfigurationProperties
使使用 @ConfigurationProperties 注解的类生效,他的括号里是数组,可以传多个类进去。 - @SpringBootApplication
是用来开启下面三个注释- @EnableAutoConfiguration:启用Spring Boot的自动配置机制
- @ComponentScan:在应用程序所在的包上启用@Component扫描(参见最佳实践)
- @Configuration:允许在上下文中注册额外的bean或导入额外的配置类
说明该类是SpringBoot的启动类。在使用是用SpringApplication.run(类.class)。
- @SpringBootConfiguration
说明这是一个配置文件类,就像xml配置文件,而现在是用java配置文件。并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。
SpringCloud部分:
- @EnableEurekaServer
声明该类是一个EurekaServer(注册中心) - @EnableDiscoveryClient
开启EurekaClient功能,将该类注册在注册中心,是其能访问到被注册的类。 - @LoadBalanced
开启Ribbon负载均衡。 - @EnableCircuitBreaker
启动微服务的熔断,防止服务器雪崩。 - @HystrixCommand(fallbackMethod=“queryUserByIdFallback”) :
声明一个失败回滚处理函数queryUserByIdFallback,当queryUserById执行超时(默认是1000毫秒),就会执行配置函数,返回错误提示。 - @SpringCloudApplication
该注解包函了:- @SpringBootApplication
- @EnableDiscoveryClient
- @EnableCircuitBreaker
- @EnableFeignClients
开启Feign功能。 - @FeignClient
声明这是一个Feign客户端,类似 @Mapper 注解。同时通过 value 属性指定服务
名称