美文网首页
深入学习java笔记-17.Spring注解驱动开发汇总

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

作者: 笨鸡 | 来源:发表于2019-05-13 16:42 被阅读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

    相关文章

      网友评论

          本文标题:深入学习java笔记-17.Spring注解驱动开发汇总

          本文链接:https://www.haomeiwen.com/subject/ugkraqtx.html