静态方法实例化bean,不用配置工厂bean,在工厂中实例化;实例方法实例化bean,需要配置工厂bean和实例对象bean,以factory-bean关联;别名alias只能一个别名,bean定义name可以定义多个
使用spring实例化bean
通过构造方法
静态方法
实例方法
bean的别名
Spring实例化bean的三种方式:
1、构造方法实例化Bean
2、静态方法实例化Bean
BeanFactory类,类中有静态方法,作用实例化Bean
xml中配置BeanFactory,标签属性中factory-method=类中实例化Bean的静态方法
3、实例化方法实例化Bean
BeanFactory类,类中有方法,作用实例化Bean
xml中配置BeanFactory,
xml中配置bean,bean的属性中factory-bean=factoryBean ,factory-method=factory中实例化bean的方法
4、Bean的别名
1、通过构造方法实例化Bean。
步骤1:创建要实例化的类,并提供无参构造方法。
public class Bean {
public Bean(){
System.out.println("Bean被创建了");
}
步骤2:spring.xml中配置
<bean id="bean的唯一标识" class="要实例化bean的路径"></bean>
测试:ApplicationContext context=new ClassPathXmlApplicationContext(spring.xml的路径);
Bean bean=context.getBean("bean",Bean.class);
System.out.println(bean);
2、通过静态方法实例化Bean。(通过Bean2的工厂的静态方法实例化Bean)
步骤1:创建Bean2的工厂Bean2Factory类以及Bean2类,并且提供一个静态、返回值类型为Bean2的方法,返回new Bean2()。
public class Bean2Factory {
public static Bean2 getBean2(){
return new Bean2();
}
}
public class Bean2 {
public Bean2(){
System.out.println("Bean2被创建了。");
}
步骤2:配置Spring.xml
<bean class="Bean2工厂的路径" factory-method="Bean2工厂的静态方法名" id="Bean2工厂的唯一标识"></bean>
测试:
ApplicationContext context=new ClassPathXmlApplicationContext("spring-ioc2.xml");
Bean2 bean=context.getBean("bean2factoryId",Bean2.class);
System.out.println(bean);
3、通过实例方法实例化Bean。(通过Bean2的工厂的实例方法实例化Bean)
步骤1:创建Bean3的工厂Bean3Factory类以及Bean3类,并且提供一个返回值类型为Bean3的方法,方法返回new Bean3()。
public class Bean3Factory {
public Bean3 getBean3(){
return new Bean3();
}
}
public class Bean3 {
public Bean3(){
System.out.println("Bean3被创建了。");
}
}
步骤2:配置Spring.xml
<bean class="main.java.com.imooc2.Bean3Factory" id="bean3Factory"></bean>
<bean class="main.java.com.imooc2.Bean3" factory-bean="bean3Factory" factory-method="getBean3" id="bean3"></bean>
给bean取别名:有类Bean1,并且通过bean标签实例化Bean1,给Bean1的实例取多个名字。
例如:方式一:bean标签里添加name属性
<bean id="bean" class="main.java.com.imooc1.Bean" name="bean1_1,bean1_2"></bean>
方式二:添加<alias>标签
<bean id="bean" class="main.java.com.imooc2.Bean1" name="bean1_1,bean1_2"></bean>
<alias name="bean" alias="bean1_3"/><!-- alias只支持一个别名 -->
实例化Bean的方法总结:
Spring 实例化Bean的方法:
Bean的别名
别名输出的都是同一个Bean实例
<bean class="org.example.Been2Factory" factory-method="getBeen2" id="been2"/>
<bean class="org.example.Been3Factory" id="been3Factory"/>
<bean id="been3" class="org.example.Been3" factory-bean="been3Factory" factory-method="getBeen3"/>
这里记一下been2 和been3的区别
been2的工厂是静态的 所以实例化been2只需要在xml中实例化工厂包括getbeen2方法就会获得been2
been3的实例化过程是先实例化been3工厂,在实例化been3工厂的时候been3并没有被实例化,而是通过
factory-been 和 factory-method配置been3被依赖的实例化工厂的实例化方法来创建。
至于been3这种方法为什么会出现,而不是直接使用been1的实例化方式还有待钻研,been1和been3代码如下
been1代码:
<bean id="been1" class="org.example.Been1" name="been1_1,been1_2" scope="prototype"/>
been3代码:
<bean class="org.example.Been3Factory" id="been3Factory"/>
<bean id="been3" class="org.example.Been3" factory-bean="been3Factory" factory-method="getBeen3"/>
Spring实例化Bean
通过构造方法实例化bean
通过静态方法实例化bean
通过实例方法实例化bean
Bean的别名
package com.example.spring.ioc; public class Bean { public Bean() { System.out.println("我是Bean的构造器!"); } }
package com.example.spring.ioc; public class Bean2 { public Bean2() { System.out.println("我是Bean2的构造器!"); } }
package com.example.spring.ioc; public class Bean2Factory { public static Bean2 getBean(){ return new Bean2(); } }
package com.example.spring.ioc; public class Bean3 { public Bean3() { System.out.println("我是Bean3的构造器!"); } }
package com.example.spring.ioc; public class Bean3Factory { public Bean3 getBean(){ return new Bean3(); } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--通过构造器方法实例化bean--> <bean id = "bean" class = "com.example.spring.ioc.Bean" name = "bean_1,bean_2"/> <!--别名--> <alias name="bean" alias="bean1" /> <!--通过静态方法实例化bean--> <bean id = "bean2" class = "com.example.spring.ioc.Bean2Factory" factory-method="getBean" /> <!--通过实例方法实例化bean--> <bean id = "bean3Factory" class="com.example.spring.ioc.Bean3Factory" /> <bean id = "bean3" class="com.example.spring.ioc.Bean3" factory-bean="bean3Factory" factory-method="getBean" /> </beans>
package com.example.spring.ioc; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class BeanTests { @Test public void Test(){ //通过构造方法实例化bean ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml"); Bean bean = ac.getBean("bean",Bean.class); System.out.println("这是bean : " + bean); System.out.println("通过构造器实例化bean完成!"); //通过静态方法实例化bean Bean2 bean2 = ac.getBean("bean2",Bean2.class); System.out.println("这是Bean2 : " + bean2); System.out.println("通过静态方法实例化bean2完成!"); //通过实例化方法实例化bean Bean3 bean3 = ac.getBean("bean3",Bean3.class); System.out.println("这是bean3 : " + bean3); System.out.println("通过实例方法实例化bean完成!"); //bean别名 Bean bean1 = ac.getBean("bean1",Bean.class); System.out.println("这是别名bean1 : " + bean1); Bean bean_1 = ac.getBean("bean_1",Bean.class); System.out.println("这是别名bean_1 : " + bean_1); Bean bean_2 = ac.getBean("bean_2",Bean.class); System.out.println("这是别名bean_2 : " + bean_2); // System.out.println("这是注入方式展示:" + ac.getBean("pojoBean").toString()); } }
1.bean创建方法:构造方法、静态方法、实例方法,2.别名
实例化Bean
每个内容对应代码
为Bean取别名
有两种方法。
在原有的<bean />中加入name属性,填入别名,支持同时输入多个别名,中间用“,”隔开。
使用<alias />字段,name中写要取别名的id,alias中写新别名。
注意:<alias />不支持输入多个别名。
方法三,通过实例方法实例化Bean
和方法二类似,在里面编写Bean的构造方法。
注意:该工厂类的构造方法与方法二不同,不为static静态。
在spring.xml文件中,先创建Bean3Factory的class,id也是bean3Factory
然后在创建Bean3的class,包含factory-method为getBean3,id是bean3,
注意:与方法二不同,多了一项factory-bean="bean3Factory"
最后,和前两步一样使用相同的创建方法。
方法二,通过静态方法实例化Bean
创建Bean的工厂类,在里面编写Bean的static静态构造方法,然后在spring.xml文件中编写图中的代码。
最后与方法一一样通过通过ApplicationContext类的getBean方法,读取。
注意:需要factory-method属性,填写创建Bean的函数名。
方法一,通过构造方法实例化Bean
通过ApplicationContext类的getBean方法,读取spring.xml文件中创建的bean
使用Spring实例化Bean
通过构造方法实例化Bean
通过静态方法实例化Bean
通过实例方法实例化Bean
实例化bean的具体写法
spring实例化bean的三种方法:
3333333333333333333
123465
123465
Spring创建bean
静态方法实例化bean,不用配置工厂bean,在工厂中实例化;实例方法实例化bean,需要配置工厂bean和实例对象bean,以factory-bean关联;别名alias只能一个别名,bean定义name可以定义多个
实例化Bean
实例化Bean的三种方法
spring bean的配置
四种方法实例化bean
在这里都实例化了,但是要观察一个细节,实际上是同一个javabean,是同一个实例
bean1@670015ef5
或者是以另外一种方式
可以设置一个alias标签,设置alias,在这里支持一个bean命名,不再支持以逗号分隔的多个bean名。