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直接实现类     直接     ======

  • <bean id="bean名" class="包名.对应实现类"></bean>

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

  • <bean id="bean名" class="包名.bean的直接工厂实现类" factory-method="静态方法"></bean>

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

  • <bean id="factory2" class="包名.Factory2实现类"></bean>
    <bean id="bean名" factory-bean="factory2" factory-method="非静态方法"></bean>

三、bean的作用域

    <bean id="bean名" class="包名。实现类 " scope="singleton"></bean>
    <bean id="bean名" class="包名。实现类 " scope="prototype"></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生命周期  :忘了说了啥

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

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

前提:提供一个student的Javabean

1.构造方法注入  

<bean id="stu" class="包名.Student">
	相当调用 public Student(String username, String password) 构造方法
	<constructor-arg name="username" value="zjc"></constructor-arg>
	<constructor-arg name="password" value="123"></constructor-arg>
</bean>-->

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

<bean id="stu" class="包名.Student">
	<constructor-arg index="0" value="zjc" type="java.lang.String"></constructor-arg>
	<constructor-arg index="1" value="30" type="int"></constructor-arg>
	<constructor-arg index="1" value="30" type="java.lang.Integer"></constructor-arg>
</bean>

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

<bean id="stu" class="包名.Student">
	<property name="username" value="zjc"></property>
	<property name="password" value="123"></property>
	<property name="age" value="12"></property>
</bean>

4.通过p命名空间注入

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

<bean id="stu" class="包名.Student"
	  p:username="zjc" p:password="123" p:age="32"></bean>

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

<bean id="stu" class="包名.student实现类">

List

  • <property name="cars">
    	<list>
    		<value>ofo</value>
    		<value>mobai</value>
    		<value>宝马</value>
    	</list>
    </property>

Set

  • <property name="pats">
    	<set>
    		<value>小黑</value>
    		<value>小黄</value>
    		<value>小白</value>
    	</set>
    </property>

Map

  • <property name="infos">
    	<map>
    		<entry key="name" value="zjc"></entry>
    		<entry key="age" value="108"></entry>
    		<entry key="ip" value="127.0.0.1"></entry>
    	</map>
    </property>

Properties

  • <property name="mysqlInfos">
    	<props>
    		<prop key="url">mysql:jdbc://localhost:3306/dbname</prop>
    		<prop key="user">root</prop>
    		<prop key="password">123456</prop>
    	</props>
    </property>

数组

  • <property name="members">
    	<array>
    		<value>哥哥</value>
    		<value>弟弟</value>
    		<value>妹妹</value>
    		<value>姐姐</value>
    	</array>
    </property>

    </bean>


六、SpEL表达式     属性注入

  • <property name="  " value="#{表达式}">  层面

示例:

  • #{123}、#{'jack'} :             数字、字符串
  • #{T(类).字段|方法}    :         静态方法或字段
  • #{beanId}    :                     另一个bean引用
  • #{beanId.propName} :     操作数据
  • #{beanId.toString()}    :    执行方法   
<bean id="customer" class="包名.Customer">
     
     调用字符串方法
    <property name="name" value="#{'zjc'.toUpperCase()}"></property>
    
    Math.PI 调用静态方法
    <property name="pi" value="#{T(java.lang.Math).PI}"></property>
    
</bean>

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

<!--创建一个地址对象-->
<bean id="address" class="包名.Address">
    <property name="name" value="北京"></property>
</bean>
  • 1.ref: 引用<property name="address" ref="address"></property>
  • 2.SpEL:<property name="address" value="#{address}"></property>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值