Springboot 这个工具中集成了很多框架,每个框架都有一个xxxAutoConfiguration。
在自动配置jar包中的Spring.facroties中有很多xxxAutoConfiguration对应的就是,每个xxxAutoConfiguration都对应了一个框架的自动配置。
以springmvc框架为例,springmvc框架他对应了一个WebMvcAutoConfiguration
@Configuration 该注解写在哪个类上面 spring容器启动时就会首先创建这个类的对象 然后从这个类上面开始读取注解 同时会调用这个类中所有使用了@Bean注解的方法 将其返回值存放到spring容器中
如果检测到路径中有了Servlet DispatcherServlet WebMvcConfigurer(我们导入了springmvc相关的依赖) @Configuration才会开始工作
否则@Configuration不工作
该类中包含的springmvc四大对象
@SpringBootApplication
@SpringBootApplication
public class SpringbootWorkApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootWorkApplication.class, args);
}
}
主要包含三个注解
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
@SpringBootConfiguration(里面就是@Configuration,标注当前类为配置类,其实只是做了一层封装改了个名字而已)
@EnableAutoConfiguration(开启自动配置)
@ComponentScan(包扫描)
@SpringBootConfiguration
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
@Indexed
public @interface SpringBootConfiguration {
@AliasFor(
annotation = Configuration.class
)
boolean proxyBeanMethods() default true;
}
该注解写在哪个类上面 spring容器启动时就会首先创建这个类的对象 然后从这个类上面开始读取注解 同时会调用这个类中所有使用了@Bean注解的方法 将其返回值存放到spring容器中
@ComponentScan
@ComponentScan:用于扫描启动类所在目录的包及子包下所有spring注解。
Spring ioc: 创建对象和给属性注入值
----- 创建对象-----
@Controller
@Service
@Repository
@Component
----- 属性注入-----
@Value
@Autowired
@Qualier
@Resource
@Configuration
@Bean
Spring aop注解
@Aspect 切面
@Before 前置通知
@After 最终通知
@AfterReturning 后置通知
@AfterThrowing 异常通知
@Around 环绕通知
@Transactional 事务
Springmvc注解 也全部启用
@RestController
@ResponseBody 把Java的数据类型转换成json格式
@RequestBody 把json格式转换成Java数据类型
@PathVariable restful风格传参用 (传单个参数)
@RequestMapping 请求路径和要调用的方法进行对应
@RequestParam ?id=1 表格同步传参 名称对不上时使用
@MapperScan() 扫描数据访问层接口所在的包 给你创建数据访问层对象
@Valid: Hibernate Validate 他的注解 写在controller方法的入参
@EnableAutoConfiguration
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage //自动导包
@Import({AutoConfigurationImportSelector.class}) //自动配置导入选择
public @interface EnableAutoConfiguration {
String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
Class<?>[] exclude() default {};
String[] excludeName() default {};
}
他会检查我们导入了哪些框架的依赖,然后去spring.factories中去找见对应框架的xxAutoConfiguration,执行其中的代码 完成自动配置(其实就是创建这个框架需要的对象)
标签:springmvc,spring,public,自动,注解,原理,Configuration,class From: https://www.cnblogs.com/YxinHaaa/p/17552197.html