Spring启动后扫描解析注解的过程】的更多相关文章

对应的类: ComponentScanBeanDefinitionParser.parse() ClassPathBeanDefinitionScanner.doScan() 参考 http://blog.csdn.net/xieyuooo/article/details/9089441…
最近项目中遇到一个业务场景,就是在Spring容器启动后获取所有的Bean中实现了一个特定接口的对象,第一个想到的是ApplicationContextAware,在setApplicationContext中去通过ctx获取所有的bean,后来发现好像逻辑不对,这个方法不是在所有bean初始化完成后实现的,后来试了一下看看有没有什么Listener之类的,发现了好东西ApplicationListener,然后百度一下ApplicationListener用法,原来有一大堆例子,我也记录一下我…
最近项目中遇到一个业务场景,就是在Spring容器启动后获取所有的Bean中实现了一个特定接口的对象,第一个想到的是ApplicationContextAware,在setApplicationContext中去通过ctx获取所有的bean,后来发现好像逻辑不对,这个方法不是在所有bean初始化完成后实现的,后来试了一下看看有没有什么Listener之类的,发现了好东西ApplicationListener,然后百度一下ApplicationListener用法,原来有一大堆例子,我也记录一下我…
<spring扩展点之三:Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法,在spring启动后做些事情> <服务网关zuul之七:zuul中的动态刷新路由配置> <ApplicationEvent事件机制源码分析> <JDK自带的观察者模式> 背景 在开发工作中,用到spring cloud的zuul,zuul中的动态刷新zuul的路由信息中用到了事件监听,事件监听也是设计模式中 发布-订阅模式.…
1.自定义注解 @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface PermissionOperation { /** * 权限Code * @return */ String code(); /** * 权限描述 * @return */ String description(); } 2.场景 在…
如果spring的项目直接监听tomcat启动对于 操作来说有很大难度,bean没有初始化,接口不能直接调用等等,所以我们代码执行要在spring启动之后执行项目 package com.java7115; public class OrderHandlingTimer implements ApplicationListener<ContextRefreshedEvent> { private static Log logger1 = LogFactory.getLog("x&qu…
1.方法所属的类继承InitializingBean接口. 2.重写afterPropertiesSet()方法. afterPropertiesSet方法会在bean被初始化时执行. 当bean的作用域是单例时,afterPropertiesSet方法会随着spring容器的初始化而初始化. 当bean的作用域是原型prototype时,每注入一次bean,都是一个全新的bean,所以afterPropertiesSet方法会在每次注入时执行一次.…
常有在spring容器启动后执行某些操作的需求,现做了一个demo的实现,做一下记录,也希望可以给需要的同学提供参考. 1.spring启动后,以新线程执行后续需要的操作,所以执行类实现Runnable接口 @Component public class StepExecutor implements Runnable{ @Overridepublic void run() {startStreamTask(); } public void startStreamTask() { //do yo…
1.前言 本文是基于JAVA配置方法对Spring IOC进行分析,掌握Spring IOC初始化流程对于我们更好的使用Spring.学习Spring还是很有帮助的,本文所使用的的Spring版本为5.2.2,下面进入分析 2.初始化流程概要图 PS:图比较大,可以选择新标签页打开 3.初始化流程详解 3.1核心对象说明 beanDefinitionMap:单例bean缓存池(对于使用FactoryBean创建出来的bean,并未保存在此map中!FactoryBean的情况,这里面存的是bea…
spring里IOC的原理就不详细写了, 如果想要搞清楚自动扫描组件是如何实现的,还有@Resouce @PostConstruct等注解的工作原理,最好可以先搞清楚整个IOC容器的运作原理再来分析这个过程. IOC容器里的bean的生命周期如下: 1. beanDefinition 的解析 2. beanDefinition 的注册 3. bean的实例化 4. bean 的依赖注入 5. bean的初始化 (在初始化前后分别有对BeanPostProcessor的应用) 当然,中整个过程中还…
文章转自 http://www.it165.net/pro/html/201406/15205.html 有朋友最近问到了 spring 加载类的过程,尤其是基于 annotation 注解的加载过程,有些时候如果由于某些系统部署的问题,加载不到,很是不解!就针对这个问题,我这篇博客说说spring启动过程,用源码来说明,这部分内容也会在书中出现,只是表达方式会稍微有些区别,我将使用spring 3.0的版本来说明(虽然版本有所区别,但是变化并不是特别大),另外,这里会从WEB中使用spring…
一:简单配置 web.xml <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.c…
通过类扫描注入到容器中,这种方式,在实际开发中还是很常用的,可以看下自己的配置文件,就会发现,自己公司的项目,搞不好就是这么注入的. 起码,我发现我公司的项目就是这么干的. 下面来演示一下简单的例子: 此例子和上一篇的差别很微弱,相比较而言,就是在xml配置文件里面的配置又变得少了. 关于要注入到容器的bean,不用自己一个个的去写,省去了很多的重复的步骤.简化了操作. 当然我说这么多,你不看看我前面的几篇文章,不亲自实现一下,是不太明朗的.当然你要是了解这个的话,我就显得关公门前耍大刀啦. 附…
我们开发任何一个Spring Boot项目,都会用到如下的启动类 1 @SpringBootApplication 2 public class Application { 3 public static void main(String[] args) { 4 SpringApplication.run(Application.class, args); 5 } 6 } 从上面代码可以看出,Annotation定义(@SpringBootApplication)和类定义(SpringAppli…
转载请注明出处: 1.SpringBoot 源码执行流程图 2. 创建SpringApplication 应用,在构造函数中推断启动应用类型,并进行spring boot自动装配 public static ConfigurableApplicationContext run(Class<?>[] primarySources, String[] args) { return (new SpringApplication(primarySources)).run(args); } 查看 Spr…
早期业务紧急,没有过多的在意项目的运行效率,现在回过头看走查代码,发现后端项目(Spring MVC+MyBatis)在启动过程中多次解析mybatis的xml配置文件及初始化数据,对开发阶段开发人员反复启停项目造成很大的时间浪费,也即是下面的第一种方式. 1.Servlet方式 @Component public class InitDataServlet extends HttpServlet {    private static final Logger LOGGER = Logger.…
Spring Security 解析(一) -- 授权过程   在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把Spring Security .Spring Security Oauth2 等权限.认证相关的内容.原理及设计学习并整理一遍.本系列文章就是在学习的过程中加强印象和理解所撰写的,如有侵权请告知. 项目环境: JDK1.8 Spring boot 2.x Spring Security 5.x 一. 一个简单的Security De…
问题描述 今天重新在搭建Spring Boot项目的时候遇到访问Controller报404错误,之前在搭建的时候没怎么注意这块.新创建项目成功后,作为项目启动类的Application在com.blog.start包下面,然后我写了一个Controller,然后包的路径是com.blog.ty.controller用的@RestController 注解去配置的controller,然后路径也搭好了,但是浏览器一直报404.最后找到原因是Spring Boot只会扫描启动类当前包和以下的包 ,…
1. 前言 最近搭建的工程都是基于SpringBoot,简化配置的感觉真爽.但有个以前的项目还是用SpringMvc写的,看到满满的配置xml文件,却有一种想去深入了解的冲动.折腾了好几天,决心去写这篇关于Spring启动的博客,自己是个刚入职的小白,技术水平有限,也是硬着头皮看源码去Debug,很多不懂的地方还请谅解! 2. 概述 先给出几个让我头皮发麻的概念:web容器,Spring容器,SpringMvc容器 容器就是管理对象的地方,例如web容器就是管理servlet的地方,Spring…
Spring Security 解析(二) -- 认证过程   在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把Spring Security .Spring Security Oauth2 等权限.认证相关的内容.原理及设计学习并整理一遍.本系列文章就是在学习的过程中加强印象和理解所撰写的,如有侵权请告知. 项目环境: JDK1.8 Spring boot 2.x Spring Security 5.x 一.@EnableGlobalAuth…
老项目是09-11年搞的,用的是spring+struts2,没有用注解,全xml配置.web.xml中也配置了一大堆. 现在启动新项目,在项目中用spring+springmvc ,主要用注解,也用了少量的必要的spring xml配置component-scan之类,其实是结合使用,最近看了spring的书,说可以完全去掉xml,用@Configuration @EnableWebMvc和 基于javaConfig配置形式. 现在又知道有servlet 3 以后,可以连web.xml 都不要…
1.前言 ​ Spring注解开发中,我们只需求要类上加上@Configuration注解,然后在类中的方法上面加上@Bean注解即可完成Spring Bean组件的注册.相较于之前的xml配置文件定义注册组件简化了非常多.那么Spring底层是如何处理@Configuration注解来完成Spring组件的注册,下面通过源码一步一步进行分析. 2.准备工作 Spring版本:2.2.13.RELEASE 源码中涉及的类: ConfigurationClassPostProcessor Conf…
1.1           Spring的AOP配置文件和注解实例解析 AOP它利用一种称为"横切"的技术,将那些与核心业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性.例如打印日志.与核心业务逻辑无关,但是却贯穿整个程序当中.所以使用AOP切面技术将日志和核心业务逻辑分离开来,通过配置文件或者注解配置切面,并为切面设置过滤条件,过滤条件是程序中的方法,表示调用程序中的这些方法时会调用日志切面的方法来打…
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/elonpage/article/details/78965176 前言 整合有缓存.事务的spring boot项目一切正常. 在该项目上整合shiro安全框架,发现部分类的缓存Cache不能正常使用. 然后发现该类的注解基本失效,包括事务Transaction注解.事务不能正常运行. 分析 注解失效的类,都是在shiro框架中(UserRealm)使用过@Autowire注入的类. 基本确定是s…
转载:http://blog.csdn.net/cuixuefeng1112/article/details/45331233 /**  * 扫描注解添加服务到缓存以供判断时候为对外开放service  */ @Component @Lazy(true) class AnnotationScannerConfigurer implements BeanDefinitionRegistryPostProcessor {      ArrayList<String> cache=RemoteCac…
如果在web项目中,用到定时器的朋友可能会遇到使用spring注解的方式获取bean的时候报空指针的异常.这是就可以使用手工的方法获取spring容器中的bean了. 下面是具体的方法: 1.先说一个最简单的方法 ContextLoaderListener.getCurrentWebApplicationContext().getBean ("beanName"); 只要传入bean的name就可以获取了,简单方便. 2.实现BeanFactoryAware接口 package cn.…
Spring Boot项目指定启动后执行的操作: (1)实现CommandLineRunner 接口 (2)重写run方法 (3)声明执行顺序@Order(1),数值越小,优先级越高 (4)如果需要注入service或者component等类,再加上@Component注解 package com.googosoft.gateway_zuul; import org.springframework.beans.factory.annotation.Value; import org.spring…
spring.datasource.schema指定启动后执行的sql文件位置. 我发现中文乱码,原因是没有指定执行sql script encoding: spring: datasource: url: "jdbc:h2:mem:test" username: "sa" password: "" schema: database/import.sql sql-script-encoding: utf-8 type: com.alibaba.d…
电脑异常重启,导致SqlServer服务启动后,自动停止,在[计算机管理]-[事件查看器]-[windows日志]中进行查看系统错误日志,在[应用程序]下发现可能的错误信息有以下两条: 1.错误:传递给数据库 'master' 中的日志扫描操作的日志扫描号 (184:416:1) 无效.此错误可能指示数据损坏,或者日志文件(.ldf)与数据文件(.mdf)不匹配.如果此错误是在复制期间出现的,请重新创建发布.否则,如果该问题导致启动期间出错,请从备份还原. 2.信息:无法恢复 master 数据…
  一.Spring容器和springmvc容器的关系如下图所示: Spring和springmvc和作为两个独立的容器,会把扫描到的注解对象分别放到两个不同的容器中, Springmvc容器是spring容器的一部分,他们访问对象的范围如下所示: ①:springmvc子容器可以访问spring父容器中的对象 ②:spring父容器不能访问springmvc子容器中的对象   ***在实际应用中的实例*** 一般情况下,一个spring / springmvc / mybatis 组合的框架中…