深入学习java笔记-17.Spring注解驱动开发汇总

2019-05-13  本文已影响0人  笨鸡

Spring注解驱动开发知识汇总

Spring注解,思维导图

Spring注解驱动开发:
    容器:
        AnnotationConfigApplictionContext
        组件添加:
            @ComponentScan:
                @Filter
                自定义过滤TypeFilter
            @Configuration
            @Bean
            @Component:
                @Service
                @Controller
                @Repository
            @Conditional
            @Primary    Autowired首选装配Bean
            @Lazy
            @Scope
            @Import
            ImportSelector
            ImportBeanDefinitionRegistrar
            FactoryBean工厂模式
        Bean生命周期:
            Bean的初始化与销毁:
                @Bean(initMethod="", destroyMethod="")
                InitializingBean, DisposableBean
                @PostConstruct, @PreDestroy
            Bean的后置处理器:
                BeanPostProcessor:
                    postProcessBeforeInitialization 在init-method之前
                    postProcessAfterInitialization  在init-method之后
                BeanPostProcessor原理:
                    populateBean 为Bean的属性赋值
                    initializeBean:
                        applyBeanPostProcessorsBeforeInitialization
                        invokeInitMethods
                        applyBeanPostProcessorsAfterInitialization
                Spring底层对BeanPostProcessor的使用:
                    Bean赋值
                    注入其他组件
                    @Autowired
                    生命周期注解功能
                    @Async
                    XXXBeanPostProcessor
        组件赋值:
            @Value
            @Autowired(required=false):     按照组件类型,位置:构造器,方法,参数,属性
                @Qualifier                  按照组件ID
                其他方式:
                    @Resource(name="")【JSR250】  不支持@Primary
                    @Inject【JSR330,需要导入javax.inject】
            @PropertySource 加载外部配置文件
            @PropertySources
            @Profile:
                Environment
                -Dspring.profiles.active=test
        组件注入:
            方法参数
            构造器注入
            ApplicationContextAware:
                ApplicationContextAwareProcessor
            ***Aware--->***Processor:
                ApplicationContextAware
                BeanNameAware
                EmbeddedValueResolverAware
        AOP:
            JoinPoint
            @EnableAspectJAutoProxy
            @Aspect
            @Pointcut:
                value:
                    execution(* spring_annotation.aop.MathCalculator.*(..)) && args(a, b)
                argNames:
                    "a, b"
            @Before
            @After
            @AfterReturning
            @AfterThrowing
        声明式事务:
            @EnableTransactionManagement
            @Transactional
    扩展原理:
        BeanFactoryPostProcessor
        BeanDefinitionRegistryPostProcessor
        ApplicationListener
        SmartInitializingSingleton
        Spring容器创建过程
    web:
        servlet:
            ServletContainerInitializer
            @HandlerTypes
            ServletContext:
                HttpServlet
                Filter
                ServletContextListener
        SpringMVC:
            AbstractAnnotationConfigDispatcherServletInitializer:
                getRootConfigClasses()
                getServletConfigClasses()
                getServletMappings()

servlet的底层原理

1、web容器在启动的时候,会扫描每个jar包下的META-INF/services/javax.servlet.ServletContainerInitializer
2、加载这个文件指定的类SpringServletContainerInitializer
3、spring的应用一启动会加载感兴趣的WebApplicationInitializer接口下的所有组件
4、并且为WebApplicationInitializer组件创建对象(组件不是接口,不是抽象类)
    1)、AbstractContextLoaderInitializer,创建根容器;createRootApplicationContext()
    2)、AbstractDispatcherServletInitializer,
        创建一个web的ioc容器,createServletApplicationContext();
        创建了DispatcherServlet,createDispatcherServlet();
        将创建的DispatcherServlet添加到ServletContext中,getServletMappings();
    3)、AbstractAnnotationConfigDispatcherServletInitializer注解方式配置的DispatcherServlet初始化器
        创建根容器,createRootApplicationContext(),getRootConfigClasses();传入一个配置类
        创建web的ioc容器,createServletApplicationContext();
            获取配置类;getServletConfigClasses();

总结:
    以注解方式来启动SpringMVC;实现AbstractAnnotationConfigDispatcherServletInitializer;
    实现抽象方法指定DispatcherServlet的配置信息;

续更,学习中。。。

详细笔记mark别人的 -> https://www.cnblogs.com/joe-tang/p/12274714.html

上一篇下一篇

猜你喜欢

热点阅读