spring bean 配置(XML)
Bean的初始化方法
Spring提供三种方式初始化Bean对象
类构造器初始化(主流)
静态工厂方法初始化(非主流)
实例工厂方法初始化(非主流)
1、类构造器初始化
Spring读取加载的Bean的class,调用对应class的无
参构造方法,实例化对象
如果没有提供无参构造方法,Spring将无法初始化Bean实例
applicationContext.xml中配置对应的Bean
<bean id=" bean1 " class="com.bdyc.spring.beanInit.Bean1"></bean>
获取Bean对象使用ApplicationContext对象进行
ApplicationContext ctx = new
ClassPathXmlApplicationContext("applicationContext.xml");
Bean1 bean1 = (Bean1) ctx.getBean(“bean1");
eg:
//实体类 public class UserBean { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public UserBean() { System.out.println("UserBean.UserBean()无参构造方法"); }; public UserBean(String name,int age) { System.out.println("UserBean.UserBean()有参构造方法"); this.name = name; this.age = age; } } <!--Bean(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="userBean" class="com.wd.bean.UserBean"></bean> </beans> //测试类 import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.wd.bean.UserBean; public class Test { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); UserBean user = (UserBean) ac.getBean("userBean"); } }
输出结果:
2、静态工厂初始化(了解)
静态工厂初始化方法是为了兼容早期项目的改造,目
前已经基本不使用此方式获取Bean实例
Bean实例的获取需要使用工厂类中的静态方法获取
提供工厂类,包含静态方法获取Bean实例
public class Bean2Factory {
public static Bean2 getInst(){
return new Bean2();
}
}
静态工厂初始化(了解)
applicationContext.xml中配置对应的Bean
<bean id="bean2"
class="com.bdyc.spring.beanInit.Bean2Factory" factory-method="getInst">
</bean>
class:配置工厂类的全路径名
factory-method:配置工厂类获取实例的静态方法名
获取Bean对象使用ApplicationContext对象进行
ApplicationContext ctx = new
ClassPathXmlApplicationContext("applicationContext.xml");
Bean2 bean2 = (Bean2) ctx.getBean(“bean2");
eg:①调用无参构造方法(默认调用)
//实体类如上 /* *静态工厂 */ public class UserFactory { public static User getUserBean(){ return new User();//调用无参构造方法 } } <!--XML配置文件--> <?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="user" class="com.wd.bean.UserFactory" factory-method="getUserBean"></bean> </beans> /** *测试类 */ public class Test { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); User user = (User) ac.getBean("user"); System.out.println(user); } }
输出结果:
②:调用有参构造方法:
public class UserFactory { public static User getUserBean(){ return new User("张三",20); } }
输出结果:
三、实例工厂初始化(了解) Bean实例的获取需要使用工厂类中的实例方法获取 提供工厂类,包含实例方法获取Bean实例 public class Bean3Factory { public Bean3 getInst(){ return new Bean3(); } } 由于使用实例工厂需要先创建实例工厂的对象,因此 在配置时,实例工厂将作为一个Bean出现,受Spring 控制,配置实例工厂的Bean 实例工厂初始化(了解) applicationContext.xml中配置对应的Bean factory-bean :配置实例工厂Bean的名称 factory-method:配置实例工厂类获取实例的方法名 获取Bean对象使用ApplicationContext对象进行 ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); Bean3 bean3 = (Bean3) ctx.getBean(“bean3");
eg:
//实体类如上 /** * 非静态工厂模式 * @author Thinkpad * */ public class UserFactory { public User getUserBean(){ return new User(); } } <!--xml配置文件--> <?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"> <!-- 1、首先创建UserFactory对象(实例化工厂bean)2、通过工厂bean调用工厂生成bean的方法 --> <bean id="factoryBean" class="com.wd.bean.UserFactory"></bean> <bean id="userBean" factory-bean="factoryBean" factory-method="getUserBean"></bean> </beans> /** * 测试类 * @author Thinkpad * */ public class Test { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); User user = (User) ac.getBean("userBean"); System.out.println(user); } }
输出结果: