Spring 核心是 控制反轉:對象創建權從代碼移交給容器,依賴關係通過配置注入,實現解耦。
package com.wangcf;
public class HelloWorld {
private String name;
public void sayHello() { System.out.println("Hello World " + name); }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://www.springframework.org/schema/beans"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean name="helloworld" class="com.wangcf.HelloWorld">
<property name="name"><value>小明</value></property>
</bean>
</beans>
<beans>:容器根元素,持有所有 Bean 定義。<bean>:單個 Bean 定義,name/id 為唯一標識,class 為全限定類名。<property>:Setter 注入,name 對應屬性名,<value> 為字面量值。package com.wangcf;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HelloTest {
@Test
public void testSayHello() {
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
HelloWorld hello = (HelloWorld) ctx.getBean("helloworld");
hello.sayHello(); // 輸出: Hello World 小明
}
}
ClassPathXmlApplicationContext 掃描 classpath 下 beans.xml。<bean>,實例化 HelloWorld(反射調用無參構造器)。setName("小明") 完成屬性注入。Map<String, Object> singletonObjects。getBean("helloworld") 從池中返回同一實例。<constructor-arg> 替代 <property>,構建不可變對象。autowire="byName/byType/constructor" 減少 XML 體積。@Component + @Autowired + <context:component-scan/> 徹底拋棄 XML。@Configuration + @Bean 類型安全配置。這個「Hello World」雖簡單,卻蘊含 Spring 容器啟動、Bean 定義註冊、實例化、依賴注入、生命周期管理的完整鏈路。掌握它,就掌握了 Spring 的靈魂。