Spring XML配置文件快速入门+总结
附:三层经典分层模型
| 层级 | 主要职责 | 常见 Spring 注解 / XML 方式 | 典型代码/类 |
|---|---|---|---|
| 表现层(Controller) (有时叫 Web层) |
接收 HTTP 请求、解析参数、返回 JSON / 页面。只负责把请求转发给业务层,不写业务逻辑。 | @Controller / @RestController(或在 XML 里 <bean class="…Controller"/> + <context:component-scan>) |
UserController |
| 业务层(Service) | 业务规则、事务控制、调用 DAO。保持业务完整且可复用,对外提供业务 API。 | @Service (XML <bean class="…ServiceImpl"/>) |
UserService、UserServiceImpl |
| 持久层(DAO / Repository) (负责数据库) |
把业务对象映射到数据库(SQL、MyBatis、JPA)。只关注 CRUD,不做业务。 | @Repository (XML <bean class="…UserDao"/>) |
UserDao |
| 领域对象(POJO / Entity / DTO) | 纯粹的数据结构:属性 + getter/setter(不含业务方法)。在 Controller ↔ Service ↔ DAO 间流转。 | @Entity(JPA)或普通 POJO(不需要注解) |
User、UserDto |
三层模型目的是实现分层解耦,以便于后期维护。三层模型关系如下:
src/main/java/com/example/dao/ ← 主目录
│
├─ UserDao.java ← 接口(只定义方法,类似于告诉spring有这么个东西)
│
├─ UserDaoImpl.java ← 正式实现(告诉spring这个东西具体是什么)
│
├─UserDaoDemo.java ← 演示/测试实现(内存 Map,方便跑 Demo 或单元测试,主程序)
│
└─applicationContext.xml ←代码运行的配置文件
一整个目录:

UserDao.java:
package com.text;
/**
* 用户数据访问对象接口
* 定义了用户数据操作的基本方法
*/
public interface UserDao {
/**
* 保存用户信息的方法
*/
public void save();
}
UserDaoImpl.java
package com.text.impl;
import com.text.UserDao;
/**
* 用户数据访问对象实现类
* 实现了UserDao接口,提供具体的数据访问逻辑
*/
public class userDao implements UserDao {
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
/**
* 实现保存用户信息的方法
* 当前为示例实现,输出测试信息
*/
private String name;
private int age;
public void save() {
System.out.println("保存用户信息:" + name + ",年龄:" + age);
System.out.println("hello spring!");
}
}
UserDaoDemo.java
package com.test.demo;
import com.text.impl.userDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* 用户数据访问对象测试类
* 用于演示Spring IoC容器的基本使用
*/
public class UserDaoDemo {
/**
* 主方法 - Spring IoC容器测试入口
* @param args 命令行参数
*/
public static void main(String[] args) {
// 创建Spring应用上下文,加载配置文件
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
// 从容器中获取userDao Bean实例
userDao userDao = (userDao) app.getBean("userDao");
// 调用save方法
userDao.save();
}
}
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"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<import resource="applicationContext-product.xml"></import>
<import resource="applicationContext-user.xml"></import>
<bean id="userDao" class="com.text.impl.userDao">
<property name="age" value="20"/>
<property name="name" value="18"/>
</bean>
<!-- <bean id="userService" class="com.service.impl.userServiceImpl">-->
<!-- <property name="userDao" ref="userDao"></property>-->
<!-- </bean>-->
<!-- <bean id="userService" class="com.service.impl.userServiceImpl" p:userDao-ref="userDao"></bean>-->
<bean id="userService" class="com.service.impl.userServiceImpl">
<constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>
</beans>
- 大多数情况下,SpringBoot 会把 XML 配置变成 Java 注解(
@Configuration、@Bean等),但了解 XML 仍然是理解 Spring “幕后” 工作原理的最佳入口。- 所有标签都必须放在根
<beans>元素内部,根标签默认使用 Spring DTD/ XSD(后面给出写法)。
根标签 <beans>
| 属性 | 用途 | 示例 |
|---|---|---|
xmlns、xmlns:xsi、xmlns:context、xmlns:util 等 |
声明命名空间(必填),让 XML 能识别 Spring、Spring‑Context、Spring‑Util 等标签。 | xml\n<beans xmlns="http://www.springframework.org/schema/beans"\n xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n xmlns:context="http://www.springframework.org/schema/context"\n xmlns:util="http://www.springframework.org/schema/util"\n xsi:schemaLocation="http://www.springframework.org/schema/beans\n https://www.springframework.org/schema/beans/spring-beans.xsd\n http://www.springframework.org/schema/context\n https://www.springframework.org/schema/context/spring-context.xsd\n http://www.springframework.org/schema/util\n https://www.springframework.org/schema/util/spring-util.xsd"> |
default-autowire |
为所有子 <bean> 设置默认 自动装配 方式(no、byName、byType、constructor)。 |
default-autowire="byType" |
default-lazy-init |
默认 懒加载(true/false),true 时 Bean 在容器启动时不实例化,只有被真正使用时才创建。 |
default-lazy-init="true" |
default-destroy-method |
为所有 Bean 指定统一的 销毁回调方法(若 Bean 本身未声明 destroy-method 时使用)。 |
default-destroy-method="close" |
profile(Spring 5.1+) |
只在匹配的 profile 环境下激活该 <beans> 块。 |
<beans profile="dev"> … </beans> |
<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"> … <!-- 下面写具体的 bean、import、alias 等 --> </beans><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"> … <!-- 下面写具体的 bean、import、alias 等 --> </beans>
导入外部资源 – <import>
| 属性 | 说明 | 示例 |
|---|---|---|
resource |
导入 另一个 XML 配置文件的路径。支持 Ant 路径(classpath*:, file: 等),可以一次导入多个文件(使用通配符 *)。 |
<import resource="classpath*:datasource.xml"/> |
optional(Spring 5+) |
若 true,当资源 不存在 时不抛异常,适用于可选的配置。 |
<import resource="classpath:extra.xml" optional="true"/> |
使用场景:把 数据源、事务管理器、第三方库 配置拆分成独立文件,主配置只负责
import。
别名 – <alias>
| 属性 | 说明 | 示例 |
|---|---|---|
name |
原 Bean 名称(或 id)。 | name="orderService" |
alias |
想要 额外声明的别名,可以在代码或其他 XML 中使用。 | alias="orderSvc" |
这样
orderService与orderSvc都能引用同一个 Bean。
Bean 定义 – <bean>
核心标签,几乎每一个业务对象都要在这里声明。下面先列出 属性,随后给出 子元素(依赖注入方式)以及完整示例。
4.1 常用属性( 几乎每个属性都可能出现 )
| 属性 | 必填? | 作用 |
|---|---|---|
id |
是(如果不使用 name) |
Bean 在容器中的 唯一标识(推荐使用驼峰式 orderService)。 |
name |
否 | 别名,可以写多个,用逗号分隔(name="orderService,orderSvc"),等价于 <alias>。 |
class |
是(除非是 <bean parent="…"> 的子 Bean) |
完全限定类名,例如 com.example.service.OrderServiceImpl。 |
parent |
否 | 继承另一个 Bean 的定义(属性、构造参数等会被继承)。 |
scope |
否 | Bean 的 作用域(singleton(默认)/ prototype / request / session / application / globalSession)。 |
lazy-init |
否 | 是否 懒加载(覆盖根标签的 default-lazy-init)。 |
autowire |
否 | 该 Bean 的 自动装配 方式(no、byName、byType、constructor),覆盖 default-autowire。 |
depends-on |
否 | 设定 依赖的 Bean 名称列表(确保这些 Bean 先初始化)。 |
init-method |
否 | Bean 初始化后要调用的自定义方法名(必须是 public void 方法())。 |
destroy-method |
否 | Bean 销毁前要调用的方法名(如 close、shutdown)。 |
abstract |
否 | 把 Bean 标记为 抽象(只作为父 Bean 使用,容器不会实例化)。 |
primary(Spring 3.0+) |
否 | 当出现 多个候选 Bean 时,标记此 Bean 为首选。 |
factory-method |
否 | 工厂方法(静态或实例方法)创建 Bean,而不是直接 new 类。 |
factory-bean |
否 | 指向 工厂 Bean(该 Bean 本身负责创建目标 Bean)。 |
qualifier(配合 @Qualifier) |
否 | 在 XML 中声明 限定符,帮助注解装配时区分同类型的 Bean。 |
4.2 子元素 – 依赖注入的三大入口
| 子元素 | 位置 | 说明 | 常用属性 |
|---|---|---|---|
<property> |
<bean> 里 |
Setter 注入(属性注入)。属性名对应 POJO 的 setter(setXxx)。 |
name(属性名)value(字面值)ref(引用其它 Bean)type(属性类型)p:(简写) |
<constructor-arg> |
<bean> 里 |
构造函数注入,可以通过 index(顺序)或 type(参数类型)定位。 |
index、type、value、ref、p: |
<qualifier> |
<bean>(子标签) |
为 自动装配 声明限定符,配合 @Qualifier 使用。 |
type(限定符类名)或 value(自定义字符串) |
<lookup-method>、<replaced-method> |
<bean>(高级) |
运行时方法注入(Lookup Method Injection)与 方法替换(Method Replacement),主要用于 Prototype‑in‑Singleton 场景。 |
集合属性注入(常用在
<property>)
<list>/<set>(<value>、<ref>、<bean>)<map>(<entry key="k" value="v"/>、<entry key-ref="someBean" value-ref="otherBean"/>)<props>(键值对,等价于java.util.Properties)
4.3 依赖注入实例(最常见两种方式)
(1) Setter 注入(使用 <property>)
xml
<bean id="orderService" class="com.example.service.OrderServiceImpl">
<!-- 注入 dataSource(另一个 Bean) -->
<property name="dataSource" ref="myDataSource"/>
<!-- 注入字符串属性 -->
<property name="defaultStatus" value="PENDING"/>
<!-- 注入集合 -->
<property name="supportedTypes">
<list>
<value>ONLINE</value>
<value>OFFLINE</value>
</list>
</property>
</bean>
<bean id="orderService" class="com.example.service.OrderServiceImpl">
<!-- 注入 dataSource(另一个 Bean) -->
<property name="dataSource" ref="myDataSource"/>
<!-- 注入字符串属性 -->
<property name="defaultStatus" value="PENDING"/>
<!-- 注入集合 -->
<property name="supportedTypes">
<list>
<value>ONLINE</value>
<value>OFFLINE</value>
</list>
</property>
</bean>
对应的 POJO 需要
setDataSource(DataSource),setDefaultStatus(String),setSupportedTypes(List<String>)方法。
(2) 构造函数注入(使用 <constructor-arg>)
xml
<bean id="paymentProcessor" class="com.example.payment.PayProcessor">
<!-- 按顺序注入 -->
<constructor-arg index="0" ref="payGateway"/>
<constructor-arg index="1" value="USD"/>
<!-- 也可以按类型匹配 -->
<constructor-arg type="com.example.gateway.Gateway" ref="payGateway"/>
<constructor-arg type="java.lang.String" value="USD"/>
</bean>
<bean id="paymentProcessor" class="com.example.payment.PayProcessor">
<!-- 按顺序注入 -->
<constructor-arg index="0" ref="payGateway"/>
<constructor-arg index="1" value="USD"/>
<!-- 也可以按类型匹配 -->
<constructor-arg type="com.example.gateway.Gateway" ref="payGateway"/>
<constructor-arg type="java.lang.String" value="USD"/>
</bean>
POJO 必须有对应构造函数:
java
public PayProcessor(Gateway gateway, String currency) { … }public PayProcessor(Gateway gateway, String currency) { … }
(3) 内联 Bean(作为属性值直接声明)
xml
<bean id="userService" class="com.example.service.UserServiceImpl">
<property name="validator">
<bean class="com.example.validation.UserValidator">
<property name="maxLength" value="20"/>
</bean>
</property>
</bean>
<bean id="userService" class="com.example.service.UserServiceImpl">
<property name="validator">
<bean class="com.example.validation.UserValidator">
<property name="maxLength" value="20"/>
</bean>
</property>
</bean>
这里
validator属性直接使用 内联 Bean,不需要再单独声明id。
常用集合标签(配合 <property>、<constructor-arg>)
| 标签 | 用途 | 示例 |
|---|---|---|
<list> |
注入 java.util.List,顺序固定。 |
xml\n<property name="roles"><list><value>ADMIN</value><value>USER</value></list></property> |
<set> |
注入 java.util.Set,自动去重。 |
xml\n<property name="ids"><set><value>1</value><value>2</value></set></property> |
<map> |
注入 java.util.Map(键/值均可是 Bean、字面值、或子 Bean)。 |
xml\n<property name="urlMap"><map><entry key="home" value="/index.html"/><entry key-ref="loginUrl" value-ref="loginBean"/></map></property> |
<props> |
注入 java.util.Properties(键/值全是字符串)。 |
xml\n<property name="mailProps"><props><prop key="mail.smtp.host">smtp.example.com</prop></props></property> |
<value> |
单个文字值(可加 type 强制转换) |
<value type="int">10</value> |
<ref> |
引用其他 Bean(等价于 ref 属性) |
<ref bean="orderDao"/> |
简写:Spring 还提供
p:命名空间(p‑属性注入),在根<beans>中加入xmlns:p="http://www.springframework.org/schema/p"后可以这样写:
xml
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"
p:host="smtp.example.com"
p:port="587"
p:username="user"
p:password="pwd"/>
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"
p:host="smtp.example.com"
p:port="587"
p:username="user"
p:password="pwd"/>
其他常见的 Spring‑XML 辅助标签(不是 Bean 本身)
| 标签 | 所属命名空间 | 作用 |
|---|---|---|
<context:component-scan> |
http://www.springframework.org/schema/context |
根据 base-package 自动 扫描 带 @Component、@Service、@Repository、@Controller 的类并注册为 Bean。 |
<context:property-placeholder> |
http://www.springframework.org/schema/context |
加载 .properties / .yml(使用 ${…} 占位符)并注入到 <property value="${…}"/> 中;Spring 5 推荐使用 @PropertySource 与 Environment。 |
<util:properties> |
http://www.springframework.org/schema/util |
把属性文件直接注册为 java.util.Properties Bean,供其它 Bean 注入。 |
<util:list>、<util:set>、<util:map> |
util |
直接在 XML 中声明集合(同 <list>/<set>/<map>,但可以不依赖 <property> 包裹),常用于 常量 Bean。 |
<tx:annotation-driven>、<tx:advice> |
http://www.springframework.org/schema/tx |
启用 声明式事务(@Transactional)或基于 AOP 的事务配置。 |
<aop:config>、<aop:aspect>、<aop:pointcut>、<aop:advisor> |
http://www.springframework.org/schema/aop |
配置 AOP(切面、通知、切点)——如果你使用 @AspectJ 注解方式,这些标签常常不需要。 |
<mvc:annotation-driven>、<mvc:resources> |
http://www.springframework.org/schema/mvc |
在非 SpringBoot 项目中打开 Spring MVC 的注解功能(@Controller、@RequestMapping)。 |
注意:在 SpringBoot 项目里,这些 XML 配置大多已被
@Configuration注解取代;但了解它们有助于阅读 老项目 或 第三方库 的 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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
https://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- ---------------------------------------------------- -->
<!-- 1️⃣ 导入外部配置(可选) -->
<import resource="classpath*:datasource.xml"/>
<!-- ---------------------------------------------------- -->
<!-- 2️⃣ 组件扫描(把 @Component、@Service 等自动加入容器) -->
<context:component-scan base-package="com.example"/>
<!-- ---------------------------------------------------- -->
<!-- 3️⃣ 属性占位符(读取 application.properties) -->
<context:property-placeholder location="classpath:application.properties"
ignore-unresolvable="true"/>
<!-- ---------------------------------------------------- -->
<!-- 4️⃣ Bean 定义(示例) -->
<bean id="orderService" class="com.example.service.OrderServiceImpl"
init-method="init" destroy-method="cleanup"
scope="singleton" lazy-init="false">
<!-- 属性注入(setter) -->
<property name="orderDao" ref="orderDao"/>
<property name="maxItems" value="100"/>
<!-- 集合注入 -->
<property name="supportedTypes">
<list>
<value>ONLINE</value>
<value>OFFLINE</value>
</list>
</property>
</bean>
<!-- 另一个 Bean(被上面引用) -->
<bean id="orderDao" class="com.example.dao.OrderDaoImpl">
<property name="dataSource" ref="myDataSource"/>
</bean>
<!-- DataSource 示例(使用 factory-method) -->
<bean id="myDataSource"
class="org.apache.commons.dbcp2.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- ---------------------------------------------------- -->
<!-- 5️⃣ AOP 示例(日志切面) -->
<aop:config>
<aop:pointcut id="serviceMethods"
expression="execution(* com.example.service.*.*(..))"/>
<aop:advisor advice-ref="logAdvice" pointcut-ref="serviceMethods"/>
</aop:config>
<bean id="logAdvice" class="com.example.aop.LoggingAdvice"/>
<!-- ---------------------------------------------------- -->
<!-- 6️⃣ 事务管理(声明式) -->
<tx:annotation-driven transaction-manager="txManager"/>
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="myDataSource"/>
</bean>
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
https://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- ---------------------------------------------------- -->
<!-- 1️⃣ 导入外部配置(可选) -->
<import resource="classpath*:datasource.xml"/>
<!-- ---------------------------------------------------- -->
<!-- 2️⃣ 组件扫描(把 @Component、@Service 等自动加入容器) -->
<context:component-scan base-package="com.example"/>
<!-- ---------------------------------------------------- -->
<!-- 3️⃣ 属性占位符(读取 application.properties) -->
<context:property-placeholder location="classpath:application.properties"
ignore-unresolvable="true"/>
<!-- ---------------------------------------------------- -->
<!-- 4️⃣ Bean 定义(示例) -->
<bean id="orderService" class="com.example.service.OrderServiceImpl"
init-method="init" destroy-method="cleanup"
scope="singleton" lazy-init="false">
<!-- 属性注入(setter) -->
<property name="orderDao" ref="orderDao"/>
<property name="maxItems" value="100"/>
<!-- 集合注入 -->
<property name="supportedTypes">
<list>
<value>ONLINE</value>
<value>OFFLINE</value>
</list>
</property>
</bean>
<!-- 另一个 Bean(被上面引用) -->
<bean id="orderDao" class="com.example.dao.OrderDaoImpl">
<property name="dataSource" ref="myDataSource"/>
</bean>
<!-- DataSource 示例(使用 factory-method) -->
<bean id="myDataSource"
class="org.apache.commons.dbcp2.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- ---------------------------------------------------- -->
<!-- 5️⃣ AOP 示例(日志切面) -->
<aop:config>
<aop:pointcut id="serviceMethods"
expression="execution(* com.example.service.*.*(..))"/>
<aop:advisor advice-ref="logAdvice" pointcut-ref="serviceMethods"/>
</aop:config>
<bean id="logAdvice" class="com.example.aop.LoggingAdvice"/>
<!-- ---------------------------------------------------- -->
<!-- 6️⃣ 事务管理(声明式) -->
<tx:annotation-driven transaction-manager="txManager"/>
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="myDataSource"/>
</bean>
</beans>
常见错误 & 排查技巧
| 错误现象 | 常见原因 | 解决办法 |
|---|---|---|
| BeanCreationException: No qualifying bean of type … | <bean> 没有被正确扫描(包名写错、component-scan 位置不对)或 id/name 拼写错误。 |
检查 base-package,或者把类显式写成 <bean id="xxx" class="…"/>。 |
| Circular reference involving … | 循环依赖(A 注入 B,B 又注入 A)且均为 singleton。 | 1) 把其中一个改为 setter 注入(Spring 能在实例化后完成), 2) 或者使用 @Lazy、构造器注入时使用 ObjectFactory/Provider。 |
| BeanDefinitionStoreException: Invalid XML syntax | XML 标签拼写错误、缺少闭合标签、或 schemaLocation 写错路径。 | 用 IDE 的 XML 验证(如 IntelliJ)或在线 XML 校验工具。 |
org.springframework.beans.factory.BeanCreationException: Could not resolve placeholder |
property-placeholder 没加载对应的 properties,或占位符写错。 |
确认 application.properties 在 classpath,且 <context:property-placeholder location="classpath:application.properties"/> 正确。 |
BeanNotOfRequiredTypeException |
ref 的 Bean 类型与属性 setter 所需类型不匹配。 |
检查 ref 指向的 Bean 类是否实现了正确的接口或父类。 |
IllegalStateException: Cannot determine target class for proxy(AOP 相关) |
AOP 切面只能代理 public 方法,没有接口且 proxy-target-class 未开启(默认使用 JDK 代理)。 |
在 <aop:config proxy-target-class="true"/> 或在 @EnableAspectJAutoProxy(proxyTargetClass = true) 开启 CGLIB 代理。 |
小结
| 关键标签 | 目的 | 必记属性/子标签 |
|---|---|---|
<beans> |
容器根节点 | default- 系列属性、命名空间 |
<import> |
引入其他 XML 文件 | resource |
<alias> |
为 Bean 再起一个别名 | name、alias |
<bean> |
定义业务对象 | id/name、class、scope、lazy-init、autowire、init-method、destroy-method、depends-on、primary、factory-method/factory-bean |
<property> / <constructor-arg> |
注入依赖(setter / 构造) | name/index、ref、value、集合子标签 |
<list> / <set> / <map> / <props> |
注入集合或属性文件 | <value>、<ref>、<entry> |
<context:component-scan> |
自动注册带注解的类 | base-package |
<context:property-placeholder> |
加载 .properties、占位符 |
location、ignore-unresolvable |
<tx:annotation-driven> |
开启 @Transactional 事务 |
transaction-manager |
<aop:config> / <aop:aspect> |
声明 AOP 切面(XML 方式) | pointcut、advice-ref |
<util:properties> / <util:list> |
把常量/集合直接注册为 Bean | location、id |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)