读取jar包中的资源文件为流

InputStream resourceAsStream = this.getClass().getResourceAsStream(“/templates/index.ftl”);
BufferedReader br = new BufferedReader(new InputStreamReader(resourceAsStream));
String s=””;
while((s = br.readLine()) != null)
System.out.println(s);

代码手动注册bean到spring容器

从bean到beandefinition的过程代码实现方式

第一种方式:通过注解bean定义读取器注册类到spring容器中,代码示例如下:

AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
AnnotatedBeanDefinitionReader annotatedBeanDefinitionReader = new AnnotatedBeanDefinitionReader(applicationContext);
annotatedBeanDefinitionReader.register(Person.class);
applicationContext.refresh();
System.out.println(applicationContext.getBean("person"));

调试代码在context的beanFactory的beanDefinitionMap中可以看到person bean。

第二种方式通过classpathbeandifinitionScanner扫描

AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
ClassPathBeanDefinitionScanner classPathBeanDefinitionScanner = new ClassPathBeanDefinitionScanner(applicationContext);
classPathBeanDefinitionScanner.scan("com/example/mybatistest");
applicationContext.refresh();
System.out.println(applicationContext.getBean("person"));

spring bean 生命周期

springbean的创建周期,spring在启动时,首先扫描注解,把注解的类生产beandefinnation对象,spring容器中,然后看类是否实现了某些接口,比如beaninitialization接口,如果定义了就会调用,这些就是spirng为我们提供的扩展点。进一步看类是否使用了aop注解,transational注解,如果注解了,就会生成代理bean,注入aop方法,或者是事务管理代码。最后生成了bean放入到beandefinationMap中。