实例化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

最新文章

  1. bzoj4591 【Shoi2015】超能粒子炮&#183;改
  2. 【JAVA】 @override报错的解决方法
  3. POJ 2109
  4. Windows下载Android源代码
  5. Sql Server通过BCP数据导出Excel
  6. mysql主从 1050错误
  7. java中的多线程——进度1
  8. SRM 409(1-250pt, 1-500pt)
  9. javascript实现的功能--二级联动
  10. Django:之CMDB资源系统
  11. PHP 工厂模式 实例讲解
  12. C# 文件操作类大全
  13. Ajax及jQuery学习
  14. 如何开发微信小程序学习
  15. NOIP2013华容道(BFS+乱搞)
  16. RHCE基础环境系统的搭建
  17. 版本适配 sdk version MD
  18. Spark学习笔记——数据读取和保存
  19. Oracle数据库版本10.2.0.1升级到10.2.0.3(转)
  20. 用jQuery实现简单的简单的轮播图

热门文章

  1. Java程序(数组扩容的尝试)
  2. GridView.RowCellClick Event
  3. ajv参数验证
  4. nginx status code 状态码
  5. cookie报错 :服务器异常An invalid character [32] was present in the Cookie value
  6. nvm node 版本管理
  7. vue-seamless-scroll 组件用法-区域内容滚动效果
  8. python37
  9. java表达式语言mvel2/ognl/spring-expression
  10. jenkins 连接Windows