bean实例化三种方式
实例化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
bean实例化三种方式的更多相关文章
- Spring学习之实例化bean的三种方式
实例化bean的三种方式 构造器实例化bean Person.java public class Person { private String name; private Integer age; ...
- spring创建bean的三种方式
spring创建bean的三种方式: 1通过构造方法创建bean(最常用) 1.1 spring默认会通过无参构造方法来创建bean,如果xml文件是这样配置,则实体类中必须要有无参构造方法,无参构造 ...
- Solon 开发,三、构建一个Bean的三种方式
Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...
- Spring 实例化bean的三种方式
第一种方法:直接配置Bean <bena id="所需要实例化的一个实例名称" class="包名.类名"/> 例如: 配置文件中的bean.XML ...
- Spring装配Bean的三种方式+导入和混合配置
目录 Spring IoC与bean 基于XML的显式装配 xml配置的基本结构 bean实例的三种创建方式 依赖注入的两种方式 构造器注入方式 setter方法注入方式 利用命名空间简化xml 基于 ...
- spring 装配bean的三种方式
这段时间在学习Spring,依赖注入DI和面向切面编程AOP是Spring框架最核心的部分.这次主要是总结依赖注入的bean的装配方式. 什么是依赖注入呢?也可以称为控制反转,简单的来说,一般完成稍微 ...
- Spring容器装配Bean的三种方式
欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系.本系列教程希望您能站在上帝 ...
- Spring实战(三)Spring中装配Bean的三种方式---XML、JavaConfig、AutoWire
创建应用对象之间协作关系的行为称为装配(wiring),这也是依赖注入的本质. Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系,而开发者需要告诉Spring需要创建哪些 ...
- 装配Bean的三种方式
一.装配Bean就是在xml写一个Bean标签:装配完Bean,还需要读取xml配置文件创建Spring容器来创建对象: 1.new 实现类方式 正常的三种创建Bean容器的方法都可以根据装配的Bea ...
- Spring实例化Bean的三种方式及Bean的类型
1.使用类构造器实例化 [默认的类构造器] <bean id=“orderService" class="cn.itcast.OrderServiceBean"/ ...
随机推荐
- nginx转发tomcat之https不生效
1.修改tomcat配置server.xml,让它从请求头中的X-Forwarded-Proto读取 <!-- xpath://Server/Service/Engine/Value --> ...
- GPT和MBR分区格式
目前市面上磁盘有两个格式,一种是GPT(Master Boot Record)分区一种是MBR(Master Boot Record)分区. 像UEFI用于取代老旧的BIOS,而GPT则为的是取代老旧 ...
- 分享: 第二性 合卷本 竖本.PDF
书本详情 第二性台版 作者: 西蒙.德.波娃(Simone de Beauvoir)出版社: 貓頭鷹原作名: Le Deuxième Sexe译者: 邱瑞鑾出版年: 2013-10页数: 1136装帧 ...
- Android中动态添加tab
来源过于啰嗦,这里只有简化后的. 转载请注明出处 http://www.cnblogs.com/zaiyuzhong/p/add-tab-dynamic-in-android.html 建立对应的布 ...
- 01_Node的版本管理
Node的版本管理工具 常见的node的版本管理工具有两种N.NVM 但是他们有一个致命的问题就是不支持Windwos 但是NVM延申了一个nvm-windows的版本,他就可以很好的支持window ...
- hive在执行简单的insert命令也会卡在kill command
终于解决了 我的配置有点问题,但在每次进入hive后,执行一遍 set hive.exec.mode.local.auto=true; 就可以用了 终于,困扰我三四天的问题解决了
- demo code
using System.Reflection; // 引用这个才能使用Missing字段 namespace hello{ public partial class Form1 : Form ...
- start-stop服务器启动
springBoot打成jar包扔到linux服务器 start.sh nohup java -Dfile.encoding=utf-8 -jar XXX-1.0-SNAPSHOT.jar > ...
- dev随笔记录
gridcontrolbandedGridviewPrintHeader = false(不显示列头)#region 勾选框全选或反选 List<string> islockList = ...
- Virtualbox EFI 写入startup.nsh
安装好的Debian系统,重启后会因为找不到入口而无法启动.定位grubx64.efi文件,可用ls直接查找或一步一步查找ls fs0:\EFI\debian\grubx64.efi edit fs0 ...