Spring 中Bean的实例化三种方式
在spring项目中,类的实例化交给了spring容器来管理,我们应该了解spring中bean的三种实例化方式。这三种实例化方式分别为构造器实例化,静态工厂实例化,实例工厂实例化,其中最最最最最重要的也是最常见的实例化方式是构造器实例化! 构造器实例化构造器实例化是指spring容器通过Bean对应的类中的默认的无参构造方法来实例化这个bean。直接上一份代码在解释//测试...
在spring项目中,类的实例化交给了spring容器来管理,我们应该了解spring中bean的三种实例化方式。
这三种实例化方式分别为构造器实例化,静态工厂实例化,实例工厂实例化,其中最最最最最重要的也是最常见的实例化方式是构造器实例化!
构造器实例化
构造器实例化是指spring容器通过Bean对应的类中的默认的无参构造方法来实例化这个bean。直接上一份代码在解释
//测试是否实例化成功
package com.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("com/config/ApplicationContext.xml");
Service service = (Service)applicationContext.getBean("service");
System.out.println(service);
}
}
package com.test;
public class Service {
}
/*
<?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="service" class="com.test.Service"></bean>
</beans>
*/
//结果
//com.test.Service@32d992b2
创建一个Service类,一个Test类用来测试,在配置文件总声名service类对应的bean然后在测试类中获取配置文件对象,通过该对象获取service类的对象,输出是否实例化成功,结果表明实例化成功了,我们大部分都是使用这种方法实例化bean的。
静态工厂方式实例化
静态工厂的方式去实例化bean其实我没使用过,我只有入门的时候去了解然后练习过几遍后面就没有机会使用了,后面后面的这俩种方式了解知道就够了。还是上一份代码
//测试工厂实例化是否成功
package com.test;
public class Service {
}
package com.test;
public class Bean {
public static Service createService(){
return new Service();
}
}
package com.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("com/config/ApplicationContext.xml");
/*Service service = (Service)applicationContext.getBean("service");
System.out.println(service);*/
System.out.println(applicationContext.getBean("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="service" class="com.test.Service"></bean>
<bean id="bean" class="com.test.Bean" factory-method="createService"></bean>
</beans>
*/
//结果
//com.test.Service@2a5ca609
想要使用工厂方式实例化bean的话还需要创建工厂类,这个工厂类的唯一功能就是不断的产生对象,然后我们使用这个类的话就需要在配置文件中配置一个bean(一个类对应一个bean) 不同于普通的bean只需要id和class就行了,工厂bean还需要配置一个factory-method属性,然后在测试里中获取这个工厂对象产生需要的对象。
实例工厂方式实例化
实例工厂方式实例化与上面的方法的区别就是工厂方法没有用static修饰,也就是实例方法来创建bean实例的方式。继续上一份代码
//测试是否实现bean的实例化
package com.test;
public class Service {
}
package com.test;
public class Bean {
public Service createService(){
return new Service();
}
}
package com.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("com/config/ApplicationContext.xml");
/*Service service = (Service)applicationContext.getBean("service");
System.out.println(service);*/
System.out.println(applicationContext.getBean("factorybean"));
}
}
//配置文件
/*
<?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="service" class="com.test.Service"></bean>
<bean id="bean" class="com.test.Bean"></bean>
<bean id ="factorybean" factory-bean="bean" factory-method="createService"></bean>
</beans>
*/
//结果
com.test.Service@2a5ca609
证明实例化成功了,以上就是spring容器实例化bean的三种方式,在三种中第一种最常用,第二种第三种我是没使用过,只了解,而且我也不怎么明天第二第三种区别在哪里,在我写过的项目中也都是使用注解的方式。
更多推荐
所有评论(0)