前置:
BeanService.java:
public interface BeanService {}
BeanServiceImpl.java:
public class BeanServiceImpl implements BeanService {
public BeanServiceImpl(){
System.out.println("调用无参构造实例化");
}
}
Spring使用xml实例化Bean的三种方式:
Ⅰ.直接创建我们需要实例化的bean标签。(默认调用无参构造函数进行实例化,没有无参构造方法则会实例化失败)
bean.xml:
<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="beanService" class="BeanServiceImpl"></bean>
</beans>
测试类:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");//读取文件获取配置信息
BeanService beanService = (BeanService) ac.getBean("beanService");//获取bean
System.out.println(beanService);
}
}
结果:
调用无参构造实例化
BeanServiceImpl@5cb9f472
Ⅱ.通过创建实例工厂的bean标签,并指定实例方法来实例化我们需要的bean。
beans.xml:
<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="staticFactory" class="StaticFactory" factory-method="createBeanService"></bean>
</beans>
StaticFactory.java:
public class StaticFactory {
public static BeanService createBeanService(){
System.out.println("静态工厂");
return new BeanServiceImpl();
}
}
测试类:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
BeanService beanService = (BeanService)ac.getBean("staticFactory");
System.out.println(beanService);
}
}
结果:
静态工厂
调用无参构造实例化
BeanServiceImpl@64bfbc86
Ⅲ.创建实例工厂的bean标签,并创建我们需要的bean的bean标签,并将工厂bean指向实例工厂,工厂方法指向实例工厂创建bean的方法。
beans.xml:
<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="instanceFactory" class="InstanceFactory"></bean>
<bean id="beanService" factory-bean="instanceFactory" factory-method="createBeanService"></bean>
</beans>
InstanceFactory.java:
public class InstanceFactory {
public BeanService createBeanService(){
System.out.println("实例工厂");
return new BeanServiceImpl();
}
}
测试类:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
BeanService beanService = (BeanService) ac.getBean("beanService");
System.out.println(beanService);
}
}
结果:
实例工厂
调用无参构造实例化
BeanServiceImpl@64bfbc86