Spring 原理
2025/2/4大约 2 分钟
Spring 使用的演变
使用配置文件
IOC
package testDI;
// 数据层
public class UserDao {
public void saveUser() {
System.out.println("User saved to the database.");
}
}
UserService
package testDI;
// 业务层
public class UserService {
private UserDao userDao;
public UserService(){
this.userDao = new UserDao();
}
public void save() {
userDao.saveUser();
}
}
SpringConfig.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标签标示配置bean
id属性标示给bean起名字
class属性表示给bean定义类型
-->
<bean id="userDao" class="testDI.UserDao"/>
<bean id="userService" class="testDI.UserService"/>
</beans>
package testDI;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @author charmingdaidai
* @project study
* @since 2025/02/08 15:33
*/
// 客户端调用(使用 Spring IOC 容器)
public class Client {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("SpringConfig.xml");
// 通过IOC容器获取UserService实例,并自动注入UserDao
UserService userService = context.getBean(UserService.class);
userService.save();
context.close();
}
}
DI
SpringConfig.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标签标示配置bean
id属性标示给bean起名字
class属性表示给bean定义类型
-->
<bean id="userDao" class="testDI.UserDao"/>
<bean id="userService" class="testDI.UserService">
<!--配置server与dao的关系-->
<!--
property标签表示配置当前bean的属性
name属性表示配置哪一个具体的属性
ref属性表示参照哪一个bean
-->
<property name="userDao" ref="userDao"/>
</bean>
</beans>
UserService
中提供对应的set方法
package testDI;
// 业务层
public class UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void save() {
userDao.saveUser();
}
}
纯注解
使用 Java类 替换 配置文件
package testDI;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* @author charmingdaidai
* @project study
* @since 2025/02/08 15:39
*/
@Configuration
@ComponentScan("testDI") // 指定扫描的包路径
public class AppConfig {
// Spring会自动将 UserDao 注入到 UserService 中
}
更改 context 的创建方式
package testDI;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* @author charmingdaidai
* @project study
* @since 2025/02/08 15:33
*/
// 客户端调用(使用 Spring IOC 容器)
public class Client {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
// 通过IOC容器获取UserService实例,并自动注入UserDao
UserService userService = context.getBean(UserService.class);
userService.save();
context.close();
}
}
注册为 Bean
package testDI;
import org.springframework.stereotype.Component;
// 数据层
@Component
public class UserDao {
public void saveUser() {
System.out.println("User saved to the database.");
}
}
package testDI;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
// 业务层
@Service
public class UserService {
@Resource
private UserDao userDao;
public void save() {
userDao.saveUser();
}
}