`

Spring实战篇(二)——注解注入

阅读更多

接上回,由于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不能支持注解注入,因为注解注入是通过BeanPostProcessorpostProcessBeforeInitialization完成的,但是BeanFactory并没有继承或者调用BeanPostProcessor,所以我们只能依靠ApplicationContext完成。

 

我们首先修改Car类,将enginegettersetter方法去掉,然后在engine上加上@Autowired注解,这个注解会根据成员的类型自动注入实现,并且是反射注入(可以没有gettersetter方法):

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引入。

 

下面我们可以将idcarbean中的engine给去掉了。

 

run一次,就可以出来同样的结果了。

 

我们还可以再进一步,既然注入可以通过注解完成,那么寻找bean的过程同样可以。

我们在EngineOneWheelNumOne上加上@Repository注解,然后在配置文件中去掉engine这个bean,然后加入如下标签:

<context:component-scan base-package="com/zrabbit.production.part" />

这个标签的意思是告诉Spring去自动扫描指定包和其所有子包内所有的类中的注解,此时可以将配置文件中的engineOnewheelNumOnebean给拿掉了。现在,我们的配置文件就是以下样子了:

<?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>

   

我们可以发现,使用了注解可以帮助我们省掉很多代码,并且配置简单,但有时注解注入也会带来不必要的麻烦,比如我们的例子中,EngineWheel的实现不可能只有一种,这时单单一个@Autowired注解就不够用了,我们可以使用@Qualifier(name)配合@Autowired使用,来确定名字确定真正注入的对象。

  • 大小: 17.5 KB
分享到:
评论

相关推荐

    Java EE 框架整合开发⼊⻔到实战——Spring+Spring MVC+MyBatis(微课版)课后习题答案.pdf

    这份文档名为《Java EE 框架整合开发入门到实战——Spring+Spring MVC+MyBatis(微课版)课后习题答案.pdf》,它显然是关于Java EE中流行的三个框架整合使用的教程。这三个框架分别是Spring、Spring MVC和MyBatis,...

    实战Web Service —— 使用Apache CXF开发Web服务的教程

    【标题】:“实战Web Service —— 使用Apache CXF开发Web服务的教程” 【内容详解】: Web服务是一种基于开放标准的、平台无关的接口技术,它允许不同系统间的应用程序进行交互。Apache CXF是一个开源的Java框架,...

    轻量级Java+EE企业应用实战——Struts+2+Spring+Hibernate整合开发电子书3.pdf

    《轻量级Java+EE企业应用实战——Struts 2 + Spring + Hibernate整合开发》是针对Java企业级应用开发的一本实战指南,旨在帮助开发者掌握使用Struts 2、Spring和Hibernate三大框架进行高效集成开发的技术与技巧。...

    精通Spring 4.x 企业应用开发实战 pdf 附source

    首先,书中详细讲解了Spring的核心概念——依赖注入(DI),它是Spring框架的基础。通过DI,我们可以将对象的创建和管理分离,使代码更加灵活和可测试。读者将学习如何使用XML配置、注解以及Java配置来实现DI,以及...

    spring-mybatis-struts2-master ——demo

    《SSM框架整合详解——基于spring-mybatis-struts2-master的实战分析》 在Java Web开发领域,SSM(Spring、Struts2、MyBatis)框架的组合被广泛使用,因其灵活性和强大的功能而备受青睐。本篇文章将深入探讨这个...

    java毕业设计&课设-spring源码深度解析+注解开发全套视频教程(视频+源码).doc

    ### Java毕业设计&课设——Spring源码深度解析+注解开发全套视频教程知识点概览 #### 一、Spring框架简介 Spring框架是由Rod Johnson创建的一款开源轻量级Java EE应用框架,旨在简化企业级应用的开发过程。Spring...

    轻量级Java_EE企业应用实战_Struts_2+Spring_3+Hibernate整合开发_第3版

    2. Spring 3的依赖注入,通过XML或注解管理Bean,实现组件化开发。 3. Hibernate的实体类设计和映射配置,以及HQL和Criteria API进行数据库操作。 4. 整合Struts 2和Spring,使用Spring做为Action的容器,提供事务...

    轻量级Java EE企业应用实战——Struts 2+Spring+Hibernate整合开发电子书2

    《轻量级Java EE企业应用实战——Struts 2+Spring+Hibernate整合开发》是一本深入探讨Java EE企业级应用开发的经典著作。该书重点介绍了如何利用Struts 2、Spring和Hibernate这三大流行框架进行高效集成,实现轻量...

    ssm框架实战项目——超市订单管理系统

    总的来说,"ssm框架实战项目——超市订单管理系统"是一个综合性的学习资源,涵盖了SSM框架的各个核心组件,有助于开发者提升Java Web开发技能,理解企业级应用的开发流程和最佳实践。实践中遇到的问题和解决方法,...

    精通Spring--Java轻量级架构开发实践.pdf

    这一章深入介绍了Spring的核心特性——依赖注入(Dependency Injection,简称DI)。依赖注入是一种设计模式,它允许开发者将对象之间的耦合度降低到最低,使得系统更加灵活,易于测试和维护。在这一章中,读者将学习...

    Spring.3.x企业应用开发实战(完整版).part2

     《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...

    动力节点_王勇_JAVA视频教程_Spring001_Spring概述

    通过这门“动力节点_王勇_JAVA视频教程_Spring001_Spring概述”,学员不仅能够了解Spring的基本概念,还能掌握其主要特性和应用场景,为后续的Spring实战项目开发做好准备。在学习过程中,建议学员结合实际代码练习...

    Spring_2.0_Samples

    总的来说,Spring 2.0 Samples文档将引导你通过一系列实战示例,掌握Spring框架的主要功能,包括但不限于依赖注入、AOP、IoC容器、Spring MVC以及数据库操作。通过学习和实践,你将能够熟练地运用Spring进行高效的...

    spring_闪电上手

    本教程将带你深入理解Spring的核心特性——依赖注入(Inversion of Control,简称IOC),并提供快速上手的实战经验。我们将通过SpringGuide.pdf这份文档,一步步解析Spring的IOC原理,并通过实际代码操作,让你迅速...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    《JavaEE开发的颠覆者: Spring Boot实战》从Spring 基础、Spring MVC 基础讲起,从而无难度地引入Spring Boot 的学习。涵盖使用Spring Boot 进行Java EE 开发的绝大数应用场景,包含:Web 开发、数据访问、安全控制...

    [轻量级Java_EE企业应用实战_Struts2_Spring3_Hibernate整合开发

    【轻量级Java_EE企业应用实战_Struts2_Spring3_Hibernate整合开发】这个主题主要涉及的是Java EE领域中的三大框架——Struts2、Spring3和Hibernate的集成应用,这是构建现代Java后端系统的一种常见方式。这些框架...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part3

    《JavaEE开发的颠覆者: Spring Boot实战》从Spring 基础、Spring MVC 基础讲起,从而无难度地引入Spring Boot 的学习。涵盖使用Spring Boot 进行Java EE 开发的绝大数应用场景,包含:Web 开发、数据访问、安全控制...

    Spring3.x企业应用开发实战(完整版) part1

     《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...

    spring底层的学习之路

    总的来说,"Spring学习之路"资料包将带你走过Spring框架的基本知识,从Spring的核心原理到实战Spring MVC项目,是一条完整的自学路径。希望你在学习过程中不断积累,提升自己的Java Web开发能力。

Global site tag (gtag.js) - Google Analytics