接上回,由于BeanFactory已经渐渐被人们所遗弃,所以我们可以将应用改写为ApplicationContext容器管理。在使用ApplicationContext我们首先要将spring-context.jar添加到Maven依赖:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency>
这时候已导入的jar包如下:
修改Car类中main方法:
public static void main(final String[] args) { // final Resource res = new ClassPathResource("applicationContext.xml"); // final BeanFactory bf = new XmlBeanFactory(res); ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); final Car myCar = (Car) ctx.getBean("myCar"); myCar.showInfo(); myCar.launch(); }
再run一次,可以出来同样的结果。
说ApplicationContext的主要目的还是要将我们的应用改写成注解注入的形式。首先,我们以前使用的XMLBeanFactory不能支持注解注入,因为注解注入是通过BeanPostProcessor的postProcessBeforeInitialization完成的,但是BeanFactory并没有继承或者调用BeanPostProcessor,所以我们只能依靠ApplicationContext完成。
我们首先修改Car类,将engine的getter和setter方法去掉,然后在engine上加上@Autowired注解,这个注解会根据成员的类型自动注入实现,并且是反射注入(可以没有getter和setter方法):
public class Car { @Autowired private Engine engine; private List<Wheel> wheels; public List<Wheel> getWheels() { return wheels; } public void setWheels(final List<Wheel> wheels) { this.wheels = wheels; } public void showInfo() { engine.showInfo(); for (final Wheel wheel : wheels) { wheel.showInfo(); } } public void launch() { engine.launch(); } }
由于wheels是一个List,我们现在还不能通过注解解决它,没关系,以后会有好的解决方式的,现在不妨就这样留在这边。
现在去跑以下应用肯定会报错,因为Spring有一个管理注解注入的开关,这个开关默认是关闭的,我们到配置文件中加一句话即可:
<context:annotation-config />
注意在beans标签下应该有如下属性:
xmlns:context=http://www.springframework.org/schema/context
xsi:schemaLocation="…http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.X.xsd">
也就是context的命名空间和xsd引入。
下面我们可以将id为car的bean中的engine给去掉了。
再run一次,就可以出来同样的结果了。
我们还可以再进一步,既然注入可以通过注解完成,那么寻找bean的过程同样可以。
我们在EngineOne和WheelNumOne上加上@Repository注解,然后在配置文件中去掉engine这个bean,然后加入如下标签:
<context:component-scan base-package="com/zrabbit.production.part" />
这个标签的意思是告诉Spring去自动扫描指定包和其所有子包内所有的类中的注解,此时可以将配置文件中的engineOne和wheelNumOne的bean给拿掉了。现在,我们的配置文件就是以下样子了:
<?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" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> <context:annotation-config /> <context:component-scan base-package="com/zrabbit.production.part" /> <bean id="myCar" class="com.zrabbit.production.Car"> <property name="wheels" > <list> <ref bean="wheelNumOne" /> <ref bean="wheelNumOne" /> <ref bean="wheelNumOne" /> <ref bean="wheelNumOne" /> </list> </property> </bean> </beans>
我们可以发现,使用了注解可以帮助我们省掉很多代码,并且配置简单,但有时注解注入也会带来不必要的麻烦,比如我们的例子中,Engine和Wheel的实现不可能只有一种,这时单单一个@Autowired注解就不够用了,我们可以使用@Qualifier(name)配合@Autowired使用,来确定名字确定真正注入的对象。
相关推荐
这份文档名为《Java EE 框架整合开发入门到实战——Spring+Spring MVC+MyBatis(微课版)课后习题答案.pdf》,它显然是关于Java EE中流行的三个框架整合使用的教程。这三个框架分别是Spring、Spring MVC和MyBatis,...
【标题】:“实战Web Service —— 使用Apache CXF开发Web服务的教程” 【内容详解】: Web服务是一种基于开放标准的、平台无关的接口技术,它允许不同系统间的应用程序进行交互。Apache CXF是一个开源的Java框架,...
《轻量级Java+EE企业应用实战——Struts 2 + Spring + Hibernate整合开发》是针对Java企业级应用开发的一本实战指南,旨在帮助开发者掌握使用Struts 2、Spring和Hibernate三大框架进行高效集成开发的技术与技巧。...
首先,书中详细讲解了Spring的核心概念——依赖注入(DI),它是Spring框架的基础。通过DI,我们可以将对象的创建和管理分离,使代码更加灵活和可测试。读者将学习如何使用XML配置、注解以及Java配置来实现DI,以及...
《SSM框架整合详解——基于spring-mybatis-struts2-master的实战分析》 在Java Web开发领域,SSM(Spring、Struts2、MyBatis)框架的组合被广泛使用,因其灵活性和强大的功能而备受青睐。本篇文章将深入探讨这个...
### Java毕业设计&课设——Spring源码深度解析+注解开发全套视频教程知识点概览 #### 一、Spring框架简介 Spring框架是由Rod Johnson创建的一款开源轻量级Java EE应用框架,旨在简化企业级应用的开发过程。Spring...
2. Spring 3的依赖注入,通过XML或注解管理Bean,实现组件化开发。 3. Hibernate的实体类设计和映射配置,以及HQL和Criteria API进行数据库操作。 4. 整合Struts 2和Spring,使用Spring做为Action的容器,提供事务...
《轻量级Java EE企业应用实战——Struts 2+Spring+Hibernate整合开发》是一本深入探讨Java EE企业级应用开发的经典著作。该书重点介绍了如何利用Struts 2、Spring和Hibernate这三大流行框架进行高效集成,实现轻量...
总的来说,"ssm框架实战项目——超市订单管理系统"是一个综合性的学习资源,涵盖了SSM框架的各个核心组件,有助于开发者提升Java Web开发技能,理解企业级应用的开发流程和最佳实践。实践中遇到的问题和解决方法,...
这一章深入介绍了Spring的核心特性——依赖注入(Dependency Injection,简称DI)。依赖注入是一种设计模式,它允许开发者将对象之间的耦合度降低到最低,使得系统更加灵活,易于测试和维护。在这一章中,读者将学习...
《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...
通过这门“动力节点_王勇_JAVA视频教程_Spring001_Spring概述”,学员不仅能够了解Spring的基本概念,还能掌握其主要特性和应用场景,为后续的Spring实战项目开发做好准备。在学习过程中,建议学员结合实际代码练习...
总的来说,Spring 2.0 Samples文档将引导你通过一系列实战示例,掌握Spring框架的主要功能,包括但不限于依赖注入、AOP、IoC容器、Spring MVC以及数据库操作。通过学习和实践,你将能够熟练地运用Spring进行高效的...
本教程将带你深入理解Spring的核心特性——依赖注入(Inversion of Control,简称IOC),并提供快速上手的实战经验。我们将通过SpringGuide.pdf这份文档,一步步解析Spring的IOC原理,并通过实际代码操作,让你迅速...
《JavaEE开发的颠覆者: Spring Boot实战》从Spring 基础、Spring MVC 基础讲起,从而无难度地引入Spring Boot 的学习。涵盖使用Spring Boot 进行Java EE 开发的绝大数应用场景,包含:Web 开发、数据访问、安全控制...
【轻量级Java_EE企业应用实战_Struts2_Spring3_Hibernate整合开发】这个主题主要涉及的是Java EE领域中的三大框架——Struts2、Spring3和Hibernate的集成应用,这是构建现代Java后端系统的一种常见方式。这些框架...
《JavaEE开发的颠覆者: Spring Boot实战》从Spring 基础、Spring MVC 基础讲起,从而无难度地引入Spring Boot 的学习。涵盖使用Spring Boot 进行Java EE 开发的绝大数应用场景,包含:Web 开发、数据访问、安全控制...
《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...
总的来说,"Spring学习之路"资料包将带你走过Spring框架的基本知识,从Spring的核心原理到实战Spring MVC项目,是一条完整的自学路径。希望你在学习过程中不断积累,提升自己的Java Web开发能力。