实例化bean的方式有三种,如下:
1、无参构造方法实例化 2、工厂静态方法实例化 3、工厂普通方法实例化
此处演示的项目结构如下:
方法一:无参构造方法实例化(注意,该类中不能存在有参构造函数)
UserDaoImpl.java
public class UserDaoImpl implements IUserDao { @Override public void save() { System.out.println("save方法执行成功..."); } }
UserServiceImpl.java
public class UserServiceImpl implements IUserService { @Override public void save() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); IUserDao userDao = (IUserDao) applicationContext.getBean("userDao"); userDao.save(); } }
BeanInitialTest.java
public class BeanInitialTest { /** * bean实例化方法一: 无参构造方法实例化 */ @Test public void test1(){ ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); IUserService userService = (IUserService) applicationContext.getBean("userService"); userService.save(); } }
applicationContext.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="userDao" class="com.hy.bean.dao.impl.UserDaoImpl"></bean> <bean id="userService" class="com.hy.bean.service.impl.UserServiceImpl"></bean> </beans>
测试代码和UserDaoImpl、UserServiceImpl代码一致,下面方法二、方法三直接省略该部分
方法二:工厂静态方法实例化
StaticBeanFactory.java
public class StaticBeanFactory { /** * 应用场景 * 依赖的jar包中有个A类,A类中有个静态方法m1,m1方法的返回值是一个B对象。如果我们频繁使用 * B对象,此时我们可以将B对象的创建权交给spring的IOC容器,以后我们在使用B对象时,无需调用A类 * 中的m1方法,直接从IOC容器获得 */ public static IUserDao returnIUserDao(){ return new UserDaoImpl(); } public static IUserService returnIUserService(){ return new UserServiceImpl(); } }
applicationContext.xml
<!--工厂静态方法实例化--> <bean id="userDao" class="com.hy.bean.factory.StaticBeanFactory" factory-method="returnIUserDao" /> <bean id="userService" class="com.hy.bean.factory.StaticBeanFactory" factory-method="returnIUserService"/>
方法三:工厂普通方法实例化
NoramlBeanFactory.java
public class NormalBeanFactory { /** * 依赖的jar包中有个A类,A类中有个普通方法m1,m1方法的返回值是一个B对象。如果我们频繁使用 * B对象, * 此时我们可以将B对象的创建权交给spring的IOC容器,以后我们在使用B对象时,无需调用A类中的m1 * 方法,直接从IOC容器获得。 */ public IUserDao returnIUserDao(){ return new UserDaoImpl(); } public IUserService returnIUserService(){ return new UserServiceImpl(); } }
applicationContext.xml
<!--工厂普通方法实例化--> <bean id="normalBeanFactory" class="com.hy.bean.factory.NormalBeanFactory" /> <bean id="userService" factory-bean="normalBeanFactory" factory-method="returnIUserService" /> <bean id="userDao" factory-bean="normalBeanFactory" factory-method="returnIUserDao" />
详细代码地址如下:https://gitee.com/duy123456/bean-initial
标签:applicationContext,m1,bean,实例,三种,new,方法,public From: https://www.cnblogs.com/du001011/p/16625467.html