深入学习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