Spring框架的XML与注解注入详解

需积分: 0 0 下载量 134 浏览量 更新于2024-09-14 收藏 607KB DOC 举报
"本文主要介绍了Spring框架的两种注入方式——纯XML配置和纯注解配置,通过具体的代码示例解析了如何在Spring中管理Bean并实现依赖注入。" 在Spring框架中,依赖注入(Dependency Injection,DI)是一种重要的设计模式,它使得组件之间的耦合度降低,提高了代码的可测试性和可维护性。Spring提供了两种主要的注入方式:纯XML配置和基于注解的配置。 首先,我们来看纯XML配置的方式: 1. 在XML配置文件中,我们需要定义各个层的Bean,如DAO、Service和Controller。例如,`LoginDao`、`LoginDaoImpl`、`LoginService`、`LoginServiceImpl`和`LoginController`。在XML中,每个Bean都有一个唯一的ID,Spring会根据这个ID来查找并实例化对应的类。 Dao层配置: ```xml <bean id="loginDao" class="com.example.LoginDaoImpl" /> ``` Service层配置: ```xml <bean id="loginService" class="com.example.LoginServiceImpl"> <property name="loginDao" ref="loginDao" /> </bean> ``` Web层配置: ```xml <bean id="loginController" class="com.example.LoginController"> <property name="loginService" ref="loginService" /> </bean> ``` 测试时,我们通过`ApplicationContext`获取Bean: ```java LoginController controller = (LoginController)applicationContext.getBean("loginController"); ``` 接下来是纯注解配置的方式: 1. 使用注解,我们可以直接在类或方法上声明Bean和其依赖。例如,在DAO和Service的实现类上使用`@Component`注解,Spring会自动扫描并注册这些类。 Dao层实现类: ```java @Component("loginDao") public class LoginDaoImpl implements LoginDao { // ... } ``` Service层实现类: ```java @Component("loginService") public class LoginServiceImpl implements LoginService { @Autowired private LoginDao loginDao; // ... } ``` Controller层: ```java @Component("loginController") public class LoginController { @Autowired private LoginService loginService; // ... } ``` 测试类: ```java @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:spring-context.xml"}) public class Test { @Autowired private LoginController loginController; // ... } ``` 这里,`@Autowired`注解用于自动装配相同类型的依赖,而`@Resource`注解可以根据指定的bean ID进行装配。 在实际项目中,我们通常不会在测试类中直接通过`ApplicationContext`获取Bean,而是通过监听器在Web应用启动时初始化Spring容器。在`web.xml`中配置`ContextLoaderListener`: ```xml <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-context.xml</param-value> </context-param> ``` 这样,Spring容器会在Web应用启动时加载配置,创建并管理所有的Bean,使得我们在应用程序中可以直接使用它们。