【Spring学习】Annotation-Driven(注解驱动编程)-spring、java常用注解

Spring2.5为我们引入了组件自动扫描机制(Annotation),它可以在类路径下寻找标记了@Component、@Service、@Controller、@Repository注解的类,并把这些类纳入到spring容器中管理,它的作用和在xml中使用bean节点配置组件一样。

1,@SpringBootApplication

通常用在主类上,是@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三个注解的复合注解。

注解 场景说明 备注
@SpringBootConfiguration 配置类注解,相当于等同于@Configuration
@EnableAutoConfiguration 开启自动配置类,激活spring的自动装配机制
@ComponentScan 激活@Component扫描 通过basePackages可指定扫描路径,默认从声明@ComponentScan所在类的package进行扫描
@Configuration(“name”) 声明当前类为配置类;通过@Resource(name = "restTemplateHttps")引入不同的类 name可缺省
@Bean 注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式; Spring只调用一次产生这个Bean对象的方法,随后Spring将这个Bean对象放在自己的IOC容器中进行管理。这些bean并不一定要在@Configuration注解下进行创建,在@Component注解下也一样可以。
@Order IOC容器中Bean的执行顺序的优先级;
默认是最低优先级,值越小优先级越高
Bean的加载顺序不受@Order或Ordered接口的影响;
主要用于相互依赖的对象的执行
@EnableConfigurationProperties 开启对@ConfigurationProperties注解配置Bean的支持;
@EnableJpaRepositories 开启对SpringData JPA Repository的支持;

2)@EnableAutoConfiguration原理

@Import+@Configuration+Spring SPI

Spring SPI(Service Provider Interface):JDK1.6
是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。
SPI是调用方来制定接口规范,提供给外部来实现,调用方在调用时则选择自己需要的外部实现。

@EnableAutoConfiguration是一个复合注解:

  1. @AutoConfigurationPackage:注册扫描路径。
    即:@Import(AutoConfigurationPackages.Registrar.class),Registrar重写了ImportBeanDefinitionRegistrar,在启动时扫描主启动类包和子包下的所有组件并加载到 Spring 容器。
  2. @Import(AutoConfigurationImportSelector.class):实现自动装配。
    AutoConfigurationImportSelector中的方法public String[] selectImports(AnnotationMetadata annotationMetadata),返回类的全路径并加载到IOC容器中,spring再将全路径通过反射(SpringFactoriesLoader.loadFactoryNames)作为bean放入IOC容器中。
    ==>举例:mybatis的引用:mybatis将@Configuration和@Bean的全限定名放入META-INF/spring.factories的jar包(存放了所有bean的全路径,以key-value形式存储)。项目引入mybatis依赖后,从spring.factories扫描类的全路径,通过反射将所有的bean放入IOC容器。

2,依赖注入相关注解

3,Spring MVC Annotation

4,参数校验

5,JSON相关注解

6,切面(AOP)注解

7,@Value

(1)支持如下方式的注入:

  1. 注入普通字符
  2. 注入操作系统属性
  3. 注入表达式结果
  4. 注入其它bean属性
  5. 注入文件资源
  6. 注入网站资源
  7. 注入配置文件

(2)@Value三种情况的用法。

  1. ${}是去找外部配置的参数,将值赋过来
    ${} 可以出现在java类配置或XML文件中,Spring会从各种已经配置了的来源中解析属性。
    要添加属性来源,可以在@Configuration类上增加@PropertySource注解,如:
@Configuration
@PropertySource("classpath:/META-INF/resources/app.properties")
public class Config{
   ……}
  1. #{}是SpEL表达式,去寻找对应变量的内容
  2. #{}直接写字符串就是将字符串的值注入进去

8,环境切换

注解 场景说明 备注
@Profile 指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件。
@Conditional 条件满足则注入 通过实现Condition接口,并重写matches方法,从而决定该bean是否被实例化。
@ConditionalOnBean 有则注入
@ConditionalOnMissBean 没有则注入

9,任务执行&调度:@Async和@Scheduled

11,测试相关注解

12,lombok相关注解

13,缓存相关

Spring 从 3.1 开始就引入了对 Cache 的支持。定义了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术。并支持使用 JCache(JSR-107)注解简化我们的开发。

注解 说明 备注
@EnableCaching 开启注解式的缓存支持; 用于主启动类
@Cacheable 将运行结果缓存,以后查询相同的数据,直接从缓存中取,不需要调用方法。 作用于方法

@Cacheable常用属性࿱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值