-
- @Controller:标识一个Spring类是Spring MVC controller处理器,@Controller类中的方法可以直接通过返回String跳转到jsp、ftl、html等模版页面。在方法上加@ResponseBody注解,也可以返回实体对象。
-
- @RestController:@RestController是@Controller和 @ResponseBody的结合体,两个标注合并起来的作用,@RestController类中的所有方法只能返回String、Object、Json等实体对象,不能跳转到模版页面.
-
- Resource是java2e的注解,可以指定name(默认),type属性,autowired默认使用type属性,配置required属性可以允许为null,如果有多个匹配,可以使用@Qualifier()配置name属性。
-
- @RequestMapping注解用于将特定HTTP请求方法映射到将处理相应请求的控制器中的特定类/方法。
类级别:映射请求的URL方法级别:映射URL以及HTTP请求方法.
- @RequestMapping注解用于将特定HTTP请求方法映射到将处理相应请求的控制器中的特定类/方法。
-
- @Configuration和@Component的区别?
@Configuration本质上还是@Component,概括就是@Configuration中所有带@Bean注解的方法都会被动态代理,保证了单例模式,因此调用该方法返回的都是同一个实例。@Component注解不能被动态代理所代理,在获取当前类名时,使用@Component获取的是当前类名;而@Configuration获取的是当前类名+唯一标识(CGLIB代理)。
-
- SpringBootApplication这个注解包括(CompoentScan, Configuration, EnableAutoConfiguration)
其中EnableAutoConfiguration会去读取每个maven包含的jar中的META-INF/Spring.factories定义的自动配置类,经过exclude和@Condition筛选出有效的自动配置类,每个自动配置类结合对应的xxxProperties.java配置文件实现实例化并生Bean;除此以外还会去读取项目中的Configuration配置类,然后将生成这些配置类的beanDefination加入到BeanDefinationMap
-
- Spring中IOC和AOP?
IOC就是把bean的管理权限交给ApplicationContext,其中包括一些从实例化到初始化完成的动态代理过程,包括属性注入–>初始化前–>初始化–>初始化后,这里包括如何解决循环依赖的问题?
AOP就是面向切面编程,基于动态代理的运行时增强,将日志文件,用户鉴权等业务抽象出来,在每个需要用到的模块中,使用pointcut匹配需要调用的方法,然后使用advice通知动态增强这个类方法。
-
- 解决循环依赖?
三层Map解决了循环依赖:
1级缓存 用来放已经完成初始化的Bean,不会发生锁定。
2级缓存 用来放实现了AOP动态代理的Bean,使用二级缓存能避免重复创建动态代理,(已经完成初始化)Bean包装起来的ObjectFactory.
3级缓存 存放的是已经完成实例化的Bean和PostConstruct(),InitlizationBean()等函数接口, 该函数接口并不会立即执行,除非等到ABA(循环依赖调用的时候),才会去调用该函数,进行AOP的动态代理创建(已经完成实例化,未开始初始化)