Java框架:Spring框架:依赖注入:bean

一、加载Spring容器的三种方式   (读取bean.xml获取对象)

1.类路径:相对路径(src下默认放置)     ======

  • ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
    (Object) context.getBean("object");
    

2.文件路径:绝对路径

  • ApplicationContext context = new FileSystemXmlApplicationContext("D:\\IDEAWorkspace\\项目名\\src\\beans.xml");
    (Object) context.getBean("object");
    

3.使用BeanFactory

  • String path = "D:\\IDEAWorkspace\\项目名\\src\\beans.xml";
    BeanFactory factory = new XmlBeanFactory(new FileSystemResource(path));
    (Object) factory.getBean("object");

BeanFactory和ApplicationContext对比

  • BeanFactory 采取延迟加载,首次getBean时才会初始化Bean
  • ApplicationContext是对BeanFactory扩展,全部加载

二、 实例化Bean的三种方式      bean名找   实现类

方式1:new直接实现类     直接     ======

方式2:通过静态工厂方法       引用实现类 的静态方法    工厂方法返回的是bean名的实现类

方式3:通过实例工厂方法     引用实现类 的非静态方法   工厂方法返回的是bean名的实现类

  • 
    

三、bean的作用域

    
    

singleton

单例:在Spring IoC容器中仅存在一个Bean实例,Bean以单例方式存在,默认值

prototype

多例:每次从容器中调用Bean时,都返回一个新的实例,new XxxBean()

request

每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境

session

同一个HTTP Session 共享一个Bean,不同Session使用不同Bean,仅适用于WebApplicationContext 环境

globalSession

一般用于Portlet应用环境,该作用域仅适用于WebApplicationContext 环境


四、bean生命周期  :忘了说了啥

Java框架:Spring框架:依赖注入:bean_第1张图片

  • 1.instantiate bean对象实例化
  • 2.populate properties 封装属性
  • 3.如果Bean实现BeanNameAware 执行 setBeanName
  • 4.如果Bean实现BeanFactoryAware 执行setBeanFactory ,获取Spring容器
  • 5.如果存在类实现 BeanPostProcessor(后处理Bean) ,执行postProcessBeforeInitialization
  • 6.如果Bean实现InitializingBean 执行 afterPropertiesSet
  • 7.调用 指定初始化方法 init
  • 8.如果存在类实现 BeanPostProcessor(处理Bean) ,执行postProcessAfterInitialization  执行业务处理
  • 9.如果Bean实现 DisposableBean 执行 destroy
  • 10.调用 指定销毁方法 customerDestroy

五、Bean属性(xml) 注入方式          属性注入

前提:提供一个student的Javabean

1.构造方法注入  


	相当调用 public Student(String username, String password) 构造方法
	
	
-->

 2.通过索引+类型  给构造方法赋值


	
	
	

3. 通过set方法往bean注入属性值


	
	
	

4.通过p命名空间注入

xmlns:p ="http://www.springframework.org/schema/p"

5.集合中注入  属性是集合类型时

List

  • 
    	
    		ofo
    		mobai
    		宝马
    	
    

Set

  • 
    	
    		小黑
    		小黄
    		小白
    	
    

Map

  • 
    	
    		
    		
    		
    	
    

Properties

  • 
    	
    		mysql:jdbc://localhost:3306/dbname
    		root
    		123456
    	
    

数组

  • 
    	
    		哥哥
    		弟弟
    		妹妹
    		姐姐
    	
    

   


六、SpEL表达式     属性注入

  •   层面

示例:

  • #{123}、#{'jack'} :             数字、字符串
  • #{T(类).字段|方法}    :         静态方法或字段
  • #{beanId}    :                     另一个bean引用
  • #{beanId.propName} :     操作数据
  • #{beanId.toString()}    :    执行方法   

     
     调用字符串方法
    
    
    Math.PI 调用静态方法
    
    

一个对象引用另外一个对象两写法



    
  • 1.ref: 引用 ref="address">
  • 2.SpEL:value="#{address}">

 

你可能感兴趣的:(Java框架)