😀前言
本章是spring基于XML 配置bean系类中第7篇讲解spring通过文件属性注入bean和基于xml的bean的自动装配以及spring-eel表达式的使用加代码合集
🏠个人主页:尘觉主页
🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉
在csdn获奖荣誉: 🏆csdn城市之星2名
💓Java全栈群星计划top前5
🤗 端午大礼包获得者
💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦😊
文章目录
- [🥰 spring通过文件属性注入bean和基于xml的bean的自动装配以及spring-eel表达式的使用加代码合集](#🥰 spring通过文件属性注入bean和基于xml的bean的自动装配以及spring-eel表达式的使用加代码合集)
-
- [😊通过属性文件给 bean 注入值](#😊通过属性文件给 bean 注入值)
-
- [src/ 创建 my.properties](#src/ 创建 my.properties)
- 配置beans.xml
- 完成测试
- [😊基于 XML 的 bean 的自动装配](#😊基于 XML 的 bean 的自动装配)
- [😊spring eel 表达式](#😊spring eel 表达式)
- 😄总结
🥰 spring通过文件属性注入bean和基于xml的bean的自动装配以及spring-eel表达式的使用加代码合集
😊通过属性文件给 bean 注入值
src/ 创建 my.properties
name=\u9EC4\u888D\u602A
id=10
skill=\u72EE\u5B50\u543C
配置beans.xml
- 先把这个文件修改成提示All Problem
- 提示错误,将光标放在context 输入alt+enter 就会自动引入namespace
- location="classpath:my.properties" 表示指定属性文件的位置
- 提示,需要带上 classpath
- 属性文件有中文,需要将其转为unicode编码-> 使用工具
<context:property-placeholder location="classpath:my.properties"/>
配置Monster对象
1.通过属性文件给monster对象的属性赋值
这时我们的属性值通过${属性名}
这里说的 属性名 就是 my.properties文件中的 k=v 的k
XML
<!--指定属性文件
1. 先把这个文件修改成提示All Problem
2. 提示错误,将光标放在context 输入alt+enter 就会自动引入namespace
3. location="classpath:my.properties" 表示指定属性文件的位置
4. 提示,需要带上 classpath
5. 属性文件有中文,需要将其转为unicode编码-> 使用工具
-->
<context:property-placeholder location="classpath:my.properties"/>
<!--配置Monster对象
1.通过属性文件给monster对象的属性赋值
2. 这时我们的属性值通过${属性名}
3. 这里说的 属性名 就是 my.properties文件中的 k=v 的k
-->
<bean class="com.spring.bean.Monster" id="monster1000">
<property name="monsterId" value="${monsterId}"/>
<property name="skill" value="${skill}"/>
<property name="name" value="${name}"/>
</bean>
完成测试
java
@Test
public void setBeanByFile() {
ApplicationContext ioc =
new ClassPathXmlApplicationContext("beans03.xml");
Monster monster1000 = ioc.getBean("monster1000", Monster.class);
System.out.println("monster1000=" + monster1000);
}
😊基于 XML 的 bean 的自动装配
在 spring 的 ioc 容器,可以实现自动装配 bean
这里说的 Action 就是 Servlet->充当 Controller
OrderDao
public class OrderDao {
//方法。。。
public void saveOrder() {
System.out.println("保存 一个订单...");
}
}
OrderService
java
public class OrderService {
//OrderDao属性
private OrderDao orderDao;
//getter
public OrderDao getOrderDao() {
return orderDao;
}
//setter
public void setOrderDao(OrderDao orderDao) {
this.orderDao = orderDao;
}
}
OrderAction
java
public class OrderAction {
//属性OrderService
private OrderService orderService;
//getter
public OrderService getOrderService() {
return orderService;
}
//setter
public void setOrderService(OrderService orderService) {
this.orderService = orderService;
}
}
💫配置beans.xml
autowire="byType" 表示 在创建 orderService时通过类型的方式 给对象属性 自动完成赋值/引用
比如OrderService 对象有 private OrderDao orderDao
就会在容器中去找有没有 OrderDao类型对象
如果有,就会自动的装配, 提示如果是按照 byType 方式来装配, 这个容器中,不能有两个 的OrderDao类型对象
如果你的对象没有属性, autowire就没有必要写
其它类推...
如果我们设置的是 autowire="byName" 表示通过名字完成自动装配
比如下面的 autowire="byName" class="com.wyxedu.spring.service.OrderService"
先看 OrderService 属性 private OrderDao orderDao
再根据这个属性的setXxx()方法的 xxx 来找对象id
public void setOrderDao() 就会找id=orderDao对象来进行自动装配
如果没有就装配失败
XML
<!--配置OrderDao对象-->
<bean class="com.spring.dao.OrderDao" id="orderDao"/>
<!--配置OrderService对象
1. autowire="byType" 表示 在创建 orderService时
通过类型的方式 给对象属性 自动完成赋值/引用
2. 比如OrderService 对象有 private OrderDao orderDao
3. 就会在容器中去找有没有 OrderDao类型对象
4. 如果有,就会自动的装配, 提示如果是按照 byType 方式来装配, 这个容器中,不能有两个
的OrderDao类型对象
5. 如果你的对象没有属性, autowire就没有必要写
6. 其它类推..
7. 如果我们设置的是 autowire="byName" 表示通过名字完成自动装配
8. 比如下面的 autowire="byName" class="com.spring.service.OrderService"
1) 先看 OrderService 属性 private OrderDao orderDao
2) 再根据这个属性的setXxx()方法的 xxx 来找对象id
3) public void setOrderDao() 就会找id=orderDao对象来进行自动装配
4) 如果没有就装配失败
-->
<bean autowire="byName" class="com.spring.service.OrderService"
id="orderService"/>
<!--配置OrderAction-->
<bean autowire="byName" class="com.spring.web.OrderAction" id="orderAction"/>
😊spring eel 表达式
-
Spring Expression Language,Spring 表达式语言,简称 SpEL。支持运行时查询并可以操作对象。
-
和 EL 表达式一样,SpEL 根据 JavaBean 风格的 getXxx()、setXxx()方法定义的属性访问对象
-
SpEL 使用#{...}作为定界符,所有在大框号中的字符都将被认为是 SpEL 表达式。
-
不是重点,如果看到有人这样使用,能看懂即可
SpELBean.java
java
public class SpELBean {
private String name;
private Monster monster;
private String monsterName;
private String crySound; //叫声
private String bookName;
private Double result;
public SpELBean() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Monster getMonster() {
return monster;
}
public void setMonster(Monster monster) {
this.monster = monster;
}
public String getMonsterName() {
return monsterName;
}
public void setMonsterName(String monsterName) {
this.monsterName = monsterName;
}
public String getCrySound() {
return crySound;
}
public void setCrySound(String crySound) {
this.crySound = crySound;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public Double getResult() {
return result;
}
public void setResult(Double result) {
this.result = result;
}
//cry 方法会返回字符串
public String cry(String sound) {
return "发出 " + sound + "叫声...";
}
//read 返回字符串
public static String read(String bookName) {
return "正在看 " + bookName;
}
@Override
public String toString() {
return "SpELBean{" +
"name='" + name + '\'' +
", monster=" + monster +
", monsterName='" + monsterName + '\'' +
", crySound='" + crySound + '\'' +
", bookName='" + bookName + '\'' +
", result=" + result +
'}';
}
}
配置beans.xml
通过spel给bean的属性赋值
XML
<!-- spring el 表达式使用
1. 通过spel给bean的属性赋值
-->
<bean id="spELBean" class="com.wyxedu.spring.bean.SpELBean">
<!-- sp el 给字面量 -->
<property name="name" value="#{'大家好'}"/>
<!-- sp el 引用其它bean -->
<property name="monster" value="#{monster01}"/>
<!-- sp el 引用其它bean的属性值 -->
<property name="monsterName" value="#{monster01.name}"/>
<!-- sp el 调用普通方法(返回值) 赋值 -->
<property name="crySound" value="#{spELBean.cry('喵喵的..')}"/>
<!-- sp el 调用静态方法(返回值) 赋值 -->
<property name="bookName" value="#{T(com.spring.bean.SpELBean).read('天龙八部')}"/>
<!-- sp el 通过运算赋值 -->
<property name="result" value="#{89*1.2}"/>
</bean>
测试
java
//通过spring el 对属性赋值
@Test
public void setBeanBySpel() {
ApplicationContext ioc =
new ClassPathXmlApplicationContext("beans04.xml");
SpELBean spELBean = ioc.getBean("spELBean", SpELBean.class);
System.out.println("spELBean=" + spELBean);
}
😄总结
本文讲解spring怎么通过通过文件属性注入bean讲解
和怎么基于xml的bean的自动装配的详细讲解
以及spring-eel表达式的使用加代码合集
spring基于XML 配置bean系类
第一篇-->怎么通过类型来获取 bean以及为什么可以通过构造器配置 bean
第二篇--> 怎么通过通过 p 名称空间配置 bean以及怎么去引用/注入其它 bean 对象--ref和怎么去引用/注入内部 bean 对象
第三篇--> spring怎么去引用/注入集合/数组类型和 怎么通过 util 名称空间创建 list以及 怎么去通过级联属性赋值
第四篇-->spring中怎么通过静态工厂和动态工厂获取对象以及怎么通过 FactoryBean 获取对象
第五篇-->spring-bean配置信息重用(继承)和bean创建顺序是什么以及bean 对象的单例和多例讲解
第六篇-->spring-bean的生命周期和怎么配置spring-bean的后置处理器
🤔欢迎大家加入我的社区 尘觉社区
文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞