3、第一个Spring文件
步骤:
1、pojo实体类
/** * @author zhangzhixi */ public class User { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + '}'; } }
2、配置元数据
<?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 https://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 使用Spring创建对象,在Spring中这些都称为Bean id:标识单个bean定义的字符串 class:完全限定的类名 property:相当于对象中的属性 name:属性名 value:属性值 ref:引用spring容器中创建好的对象 --> <bean id="user" class="com.zhixi.pojo.User"> <property name="id" value="2018"/> <property name="name" value="张志喜"/> </bean> </beans>
3、实例化容器
public class MyTest { public static void main(String[] args) { // 获取Spring上下文对象,多个xml文件,用逗号隔开 ApplicationContext context = new ClassPathXmlApplicationContext("bens.xml"); // 我们的对象都在spring中进行管理,需要使用的直接去spring容器中取 User user = (User) context.getBean("user"); System.out.println(user.toString()); } }
User{id=2018, name='张志喜'}
===================================================================================
第一个案例中使用ioc思想进行改进代码:
需要注意的是,要修改对象的话,必须要是在set方法中修改,所以这个service接口实现类就显得很重要了:
public class UserServiceImpl implements IUserService { IUserDao userDao; //利用set进行动态实现值的操作 public void setUserDao(IUserDao userDao) { this.userDao = userDao; } public void getUser() { //业务层调dao层 userDao.getUser(); } }
bens.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 https://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 使用Spring创建对象,在Spring中这些都称为Bean id:标识单个bean定义的字符串 class:完全限定的类名 property:相当于对象中的属性 name:属性名 value:属性值 ref:引用spring容器中创建好的对象 --> <bean id="daoImpl" class="com.zhixi.dao.UserDaoImpl"/> <bean id="mysqlImpl" class="com.zhixi.dao.UserDaoMysqlImpl" /> <bean id="oracleImpl" class="com.zhixi.dao.UserDaoOracleImpl" /> <bean id="userService" class="com.zhixi.service.UserServiceImpl"> <!--需要哪种需求就直接在ref中添加对应的对象id,大大降低了程序的耦合度
name中是UserServiceImpl的属性名
--> <property name="userDao" ref="mysqlImpl"></property> </bean> </beans>
测试文件:
public class MyTest { public static void main(String[] args) { // 获取ApplicationContext对象:拿到Spring容器 ApplicationContext context = new ClassPathXmlApplicationContext("bens.xml"); // 传入在xml文件中配置好的对象id UserServiceImpl userService = (UserServiceImpl) context.getBean("userService"); userService.getUser(); } }
获取mysql用户信息
小结:第一个案例中user对象是由Spring创建的
user对象的属性是怎么设置的?
user对象的属性是由Spring容器设置的,这个过程就叫控制反转:
- 控制:谁来控制对象的创建,传统应用程序的对象是由程序本身控制创建的,使用Spring后,对象是由Spring来创建的.
- 反转:程序本身不创建对象,而变成被动的接收对象.
- 依赖注入:就是利用set方法来进行注入的.
- IOC是一种编程思想,由主动的编程变成被动的接收.
- 到了现在,我们彻底不用再程序中去改动了,要实现不同的操作,只需要在xmI配置文件中进行
修改,所谓的IoC,一句话搞定:对象由Spring来创建,管理,装配!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话