Spring中四种实例化bean的方式
本文主要介绍四种实例化bean的方式(注入方式) 或者叫依赖对象实例化的四种方式。上面的程序,创建bean 对象,用的是什么方法 ,用的是构造函数的方式 (Spring 可以在构造函数私有化的情况下把类对象创建出来)
常用的创建方式有以下四种:
1) setter 方法
2) 构造函数
3) 静态工厂
4) 实例工厂
一、用 setter 方式
public interface IUserDao {
void addUser();
void delUser();
void updateUser();
} public class UserDaoImpl implements IUserDao {
public void addUser() {
System.out.println("addUser方法被调用了");
}
public void delUser() {
System.out.println("delUser方法被调用了");
}
public void updateUser() {
System.out.println("updateUser方法被调用了");
}
} public class UserAction {
private IUserDao dao; //dao是一个依赖对象,要由springg进行管理,要生成 get set 方法
public void execute(){
dao.addUser();
dao.updateUser();
dao.delUser();
}
}
//配置文件
<bean name="userAction_name" class="cat.action.UserAction" >
<property name="dao" ref="userDao_name" /> //引用的是下面的名称
</bean>
<bean name="userDao_name" class="cat.dao.UserDaoImpl" />
//测试
ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
UserAction action=(UserAction)ctx.getBean("userAction_name");
action.execute();
二、构造函数
public class UserAction {
//public UserAction(){} 可以保保留一个无参的构造函数 //这是几个依赖对象,不用生成get set方法了
private UserInfo user;
private String school;
private IUserDao dao; //希望Spring 由构造函数注入依赖对象
public UserAction(IUserDao dao,UserInfo user,String school){
this.dao=dao;
this.school=school;
this.user=user;
} public void execute(){
dao.addUser();
dao.updateUser();
dao.delUser(); System.out.println(user);
System.out.println(school);
}
//配置文件
<bean name="userInfo_name" class="cat.beans.UserInfo" >
<property name="id" value="1" />
<property name="userName" value="周周" />
<property name="password" value="123" />
<property name="note" value="这是备注" />
</bean> <bean name="userAction_name" class="cat.action.UserAction" >
<constructor-arg ref="userDao_name" />
<constructor-arg ref="userInfo_name" />
<constructor-arg value="哈尔滨师范大学" />
</bean> /*
也可以指定 索引和 type 属性 , 索引和type 都可以不指定
<bean name="userAction_name" class="cat.action.UserAction" >
<constructor-arg index="0" ref="userDao_name" type="cat.dao.IUserDao" /> 如果是接口,就不能指定是实现类的类型
<constructor-arg index="1" ref="userInfo_name" type="cat.beans.UserInfo" />
<constructor-arg index="2" value="哈尔滨师范大学" />
</bean>
*/ <bean name="userDao_name" class="cat.dao.UserDaoImpl" />
//测试
ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
UserAction action=(UserAction)ctx.getBean("userAction_name");
action.execute();
三、静态工厂方式
//工厂,用来生成dao的实现类
public class UserDaoFactory {
public static IUserDao createUserDaoInstance(){
return new UserDaoOracleImpl();
}
} public class UserAction {
private IUserDao dao;//使用工厂方式注值,也要生成set方法
public void execute(){
dao.addUser();
dao.updateUser();
dao.delUser();
} public void setDao(IUserDao dao) {
this.dao = dao;
}
}
//配置文件
<bean name="userAction_name" class="cat.action.UserAction" >
<property name="dao" ref="userDao_name" />
</bean> <bean name="userDao_name" class="cat.dao.UserDaoFactory" factory-method="createUserDaoInstance" />
//测试
ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
UserAction action=(UserAction)ctx.getBean("userAction_name");
action.execute();
四、实例工厂
//工厂 =>
public class UserDaoFactory {
//这个方法不是静态的
public IUserDao createUserDaoInstance(){
return new UserDaoOracleImpl();
}
}
//配置文件
<bean name="userAction_name" class="cat.action.UserAction" >
<property name="dao" ref="userDao_name" />
</bean> <bean name="userDaoFactory_name" class="cat.dao.UserDaoFactory" />
<bean name="userDao_name" factory-bean="userDaoFactory_name" factory-method="createUserDaoInstance" />
Spring中四种实例化bean的方式的更多相关文章
- Spring中三种配置Bean的方式
Spring中三种配置Bean的方式分别是: 基于XML的配置方式 基于注解的配置方式 基于Java类的配置方式 一.基于XML的配置 这个很简单,所以如何使用就略掉. 二.基于注解的配置 Sprin ...
- (转)Spring的三种实例化Bean的方式
http://blog.csdn.net/yerenyuan_pku/article/details/52832793 Spring提供了三种实例化Bean的方式. 使用类构造器实例化. <be ...
- Spring第四弹—–Spring的三种实例化bean的方式
1.使用类构造器实例化 1 <bean id=“orderService" class="cn.itcast.OrderServiceBean"/> 2. ...
- 三种实例化bean的方式
在spring中有三中实例化bean的方式: 一.使用构造器实例化:(90%通常使用的一个方法) 二.使用静态工厂方法实例化: 三.使用实例化工厂方法实例化. 每种实例化所采用的配置是不一样的: 一. ...
- spring三种实例化bean的方式
1构造函数实例化 2静态工厂方法实例化 3实例工厂方法实例化 service接口: package service; public interface PersonService { public v ...
- Spring的几种注入bean的方式
在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入 这是最常用的方式: · 使用构造器注入: · 使用Filed注入(用于注解方式). 使用属性的se ...
- Spring框架几种创建bean的方式
Spring框架下,Bean的创建和装配非常的灵活,提供了三种主要的方式,并且相互见可以互相看见,也就是你可以随意地采用你喜欢且合适的方式创建Bean,而不用担心他们之间的兼容问题. 一.使用XML显 ...
- 转:深入浅出spring IOC中四种依赖注入方式
转:https://blog.csdn.net/u010800201/article/details/72674420 深入浅出spring IOC中四种依赖注入方式 PS:前三种是我转载的,第四种是 ...
- spring IOC容器实例化Bean的方式与RequestContextListener应用
spring IOC容器实例化Bean的方式有: singleton 在spring IOC容器中仅存在一个Bean实例,Bean以单实例的方式存在. prototype 每次从容器中调用Bean时, ...
随机推荐
- vue操作的填坑之旅
1.渲染时图片存在,但损坏,会出现破损图,界面很丑呀 解决方案:调用vue显示的图片的时候会有一些图片404的问题,为了界面的美观,这里进行图片错误是显示默认图片的处理,下面贴出代码 data: { ...
- Html5与Css3知识点拾遗(三)
文本 small:包括免责申明.注意事项.法律限制.版权信息,只适用于短于,常包含在页面级的footer里 H5对i和b的重新定义 b:提醒文字.不传达任何额外的语气.文档摘要关键词.评论中的产品名. ...
- 软工网络15Alpha阶段敏捷冲刺博客集合
博客链接集合 第一篇:http://www.cnblogs.com/net15/p/8885400.html 第二篇:http://www.cnblogs.com/net15/p/8893808.ht ...
- SQL SERVER占用CPU过高优化
操作系统是Windows2008R2 ,数据库是SQL2014 64位. 近阶段服务器出现过几次死机,管理员反馈机器内存使用率100%导致机器卡死.于是做了个监测服务器的软件实时记录CPU数据,几日观 ...
- RSA 算法
RSA 算法 from http://www.matrix67.com/blog/archives/5100 所有工作都准备就绪,下面我们可以开始描述 RSA 算法了. 首先,找两个质数,比如说 1 ...
- ubuntu16.04安装最新版docker、docker-compose、docker-machine
安装前说明: 本文将介绍在ubuntu16.04系统下安装和升级docker.docker-compose.docker-machine. docker:有两个版本:docker-ce(社区版)和do ...
- ReactNative学习笔记(五)踩坑总结
已经发现的bug或者问题 Android不支持shadow属性: Animated.Image的borderRadius不生效: setNativeProps无法修改图片的source: 没有直接设置 ...
- WITH RECOMPILE 和 OPTION(RECOMPILE) 使用上的区别
在考虑重编译T-SQL(或者存储过程)的时候,有两种方式可以实现强制重编译(前提是忽略导致重编译的其他因素的情况下,比如重建索引,更新统计信息等等), 一是基于WITH RECOMPILE的存储过程级 ...
- Ideas
1.蔬菜店,自带种植的菜地.(实现蔬菜都是新采摘的.) 这个试用于农村,因为需要土地.农村现在蔬菜店大多也是外出进货.有些菜放久了,就坏掉了. 这里有问题就是,(1).如果销量不够,怎么让蔬菜不烂在菜 ...
- Linux下安装mysql5.7
Linux下安装mysql5.7 首先准备好mysql5.7.17的安装包,安装包放在 /data/software 目录下 进入到 /usr/local 目录下,解压mysql安装包 命令: ...