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" />
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了