Bean实例化的三种方式
2018-01-22 15:36
239 查看
bean 实例化的三种方式实现:
第一种:使用类的无参数构造创建(第一种是重点,第二三种已经没太多人用了)
目录树:
1.首先定义一个 bean:
bean1.java:
2.在Spring配置文件Bean.xml 中 配置 bean:
<bean id = “bean1” class="com.spring.demo.Bean1"></bean>:
id 为 在 xml 里的这个 bean的标识。 class 为xml 里的这个bean 绑定的java类(bean)的全路径(包名+类名)
这个标签会自动寻找 Bean1类中的无参数构造函数来创建对象
3.测试代码从配置文件中取出Bean1对象:
getBean() 返回的就是由spring 实例化的对象。
结果是:打印返回的对象b,和调用 b 的print()方法
第二种:使用静态工厂创建
1.定义一个bean:
bean2.java:(就是要创建这个类的对象)
表示创建的对象(bean)用bean2指代,使用到的class(类)为com.spring.demo 包 下的Bean2Factory类(作为工厂类)
factory-method = "getBean2"表示调用 class 下的 getBean2方法来创建对象(而且factory-method指定的方法必须为static静态方法)
3.定义静态工厂类
package com.spring.demo;
public class Bean2Factory {
public static Bean2 getBean2(){
return new Bean2();
}
}
注意静态工厂类的创建对象方法为静态
4.测试代码:
public class TextIoc {
@Test
public void textUser()
{
//1.获取spring文件
ApplicationContext context = new ClassPathXmlApplicationContext("Bean.xml");
//2.由配置文件返回对象
Bean3 b = (Bean2)context.getBean("bean2");
System.out.println(b);
b.print();
}
}
第三种:使用实例工厂创建
1.定义一个bean:
package com.spring.demo;
public class Bean3 {
public void print(){
System.out.println("Bean3......");
}
}
2.配置spring的配置文件:
<?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 id="bean3factory" class="com.spring.demo.Bean3Factory"></bean>
<bean id="bean3" factory-bean="bean3factory" factory-method="getBean3"></bean>
</beans>
第八行:<bean id="bean3factory" class="com.spring.demo.Bean3Factory"></bean> :为在xml配置文件中定义一个bean,这个bean的id 为bean3factory ,创建所用到的类(class)为com.spring.demo 包下的 Bean3Factory类
第九行:<bean id="bean3" factory-bean="bean3factory" factory-method="getBean3"></bean> :
在定义一个bean,id 为bean3,生产它的工厂类为 bean3factory,调用 bean3factory生产 bean3的方法为 (bean3factory的)getBean3()方法
3.(非静态)工厂类
package com.spring.demo;
public class Bean3Factory {
public Bean3 getBean3(){
return new Bean3();
}
}
4.测试代码:
public class TextIoc {
@Test
public void textUser()
{
//1.获取spring文件
ApplicationContext context = new ClassPathXmlApplicationContext("Bean.xml");
//2.由配置文件返回对象
Bean3 b = (Bean3)context.getBean("bean3");
System.out.println(b);
b.print();
}
}运行:
打印出对象,和调用bean3的print方法
静态工厂类与非静态工厂类的区别是,前者不需要创建对象,直接可以调用静态方法创建bean;后者则要先创建对象,然后再通过对象调用其方法创建bean
第一种:使用类的无参数构造创建(第一种是重点,第二三种已经没太多人用了)
目录树:
1.首先定义一个 bean:
bean1.java:
package com.spring.demo; public class Bean1 { public void print(){ System.out.println("Bean1......"); } }这个bean只有一个print方法
2.在Spring配置文件Bean.xml 中 配置 bean:
<?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 id="bean1" class="com.spring.demo.Bean1"></bean> </beans>
<bean id = “bean1” class="com.spring.demo.Bean1"></bean>:
id 为 在 xml 里的这个 bean的标识。 class 为xml 里的这个bean 绑定的java类(bean)的全路径(包名+类名)
这个标签会自动寻找 Bean1类中的无参数构造函数来创建对象
3.测试代码从配置文件中取出Bean1对象:
package com.spring.demo; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TextIoc { @Test public void textUser() { //1.获取spring文件 ApplicationContext context = new ClassPathXmlApplicationContext("Bean.xml"); //2.由配置文件返回对象 Bean1 b = (Bean1)context.getBean("bean1"); System.out.println(b); b.print(); } }
getBean() 返回的就是由spring 实例化的对象。
结果是:打印返回的对象b,和调用 b 的print()方法
第二种:使用静态工厂创建
1.定义一个bean:
bean2.java:(就是要创建这个类的对象)
package com.spring.demo; public class Bean2 { public void print(){ System.out.println("Bean2......"); } }2.配置spring的配置文件
<?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 id="bean2" class="com.spring.demo.Bean2Factory" factory-method="getBean2"></bean> </beans><bean id="bean2" class="com.spring.demo.Bean2Factory" factory-method="getBean2"></bean>:
表示创建的对象(bean)用bean2指代,使用到的class(类)为com.spring.demo 包 下的Bean2Factory类(作为工厂类)
factory-method = "getBean2"表示调用 class 下的 getBean2方法来创建对象(而且factory-method指定的方法必须为static静态方法)
3.定义静态工厂类
package com.spring.demo;
public class Bean2Factory {
public static Bean2 getBean2(){
return new Bean2();
}
}
注意静态工厂类的创建对象方法为静态
4.测试代码:
public class TextIoc {
@Test
public void textUser()
{
//1.获取spring文件
ApplicationContext context = new ClassPathXmlApplicationContext("Bean.xml");
//2.由配置文件返回对象
Bean3 b = (Bean2)context.getBean("bean2");
System.out.println(b);
b.print();
}
}
第三种:使用实例工厂创建
1.定义一个bean:
package com.spring.demo;
public class Bean3 {
public void print(){
System.out.println("Bean3......");
}
}
2.配置spring的配置文件:
<?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 id="bean3factory" class="com.spring.demo.Bean3Factory"></bean>
<bean id="bean3" factory-bean="bean3factory" factory-method="getBean3"></bean>
</beans>
第八行:<bean id="bean3factory" class="com.spring.demo.Bean3Factory"></bean> :为在xml配置文件中定义一个bean,这个bean的id 为bean3factory ,创建所用到的类(class)为com.spring.demo 包下的 Bean3Factory类
第九行:<bean id="bean3" factory-bean="bean3factory" factory-method="getBean3"></bean> :
在定义一个bean,id 为bean3,生产它的工厂类为 bean3factory,调用 bean3factory生产 bean3的方法为 (bean3factory的)getBean3()方法
3.(非静态)工厂类
package com.spring.demo;
public class Bean3Factory {
public Bean3 getBean3(){
return new Bean3();
}
}
4.测试代码:
public class TextIoc {
@Test
public void textUser()
{
//1.获取spring文件
ApplicationContext context = new ClassPathXmlApplicationContext("Bean.xml");
//2.由配置文件返回对象
Bean3 b = (Bean3)context.getBean("bean3");
System.out.println(b);
b.print();
}
}运行:
打印出对象,和调用bean3的print方法
静态工厂类与非静态工厂类的区别是,前者不需要创建对象,直接可以调用静态方法创建bean;后者则要先创建对象,然后再通过对象调用其方法创建bean
相关文章推荐
- Spring中bean实例化的三种方式
- Spring 三种实例化Bean的方式
- 第二章 IoC 三种实例化Bean的方式
- Spring中bean实例化的三种方式
- bean实例化的三种方式以及属性注入
- 三种实例化bean的方式
- Sping学习笔记(2)----实例化Bean的三种方式
- 三种实例化bean的方式
- 三种实例化BEAN的方式
- 创建Bean的三种方式 在大多数情况下,Spring容器直接通过new关键字调用构造器来创建Bean实例,而class属性指定Bean实例的实现类,但这不是实例化Bean的唯一方法。实际上,Sprin
- 三种实例化Bean的方式
- IoC容器实例化Bean三种方式
- spring的三种实例化bean方式
- Spring中Bean的基于xml的三种实例化方式
- Spring三种实例化Bean的方式
- spring bean的三种实例化方式
- 三种实例化bean的方式
- Spring2.5学习1.3_三种实例化bean的方式
- 实例化bean的三种方式
- Bean实例化的三种方式