Spring的依赖注入配置,除了利用xml配置文件以外,在Spring2.5以上版本后,鼓励
使用以@符号嵌入Java代码内部的annotaton注释
我们先来看一个传统的完全使用xml配置的例子
Office.java
package spring3.basic.annotation.compare;
public class Office {
private String officeNo = "001";
public String getOfficeNo() {
return officeNo;
}
public void setOfficeNo(String officeNo) {
this.officeNo = officeNo;
}
@Override
public String toString() {
return "Office No:" + officeNo;
}
}
Car.java:
package spring3.basic.annotation.compare;
public class Car {
private String brand;
private double price;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "brand:" + brand + "," + "price:" + price;
}
}
Boss.java(需要被注入的组合业务类)
package spring3.basic.annotation.compare;
public class Boss {
private Car car;
private Office office;
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
public Office getOffice() {
return office;
}
public void setOffice(Office office) {
this.office = office;
}
@Override
public String toString() {
return "Car:" + car + "\n" + "Office:" + office;
}
}
接下来,我们能需要通过配置文件来实例化我们的主类和辅助的注入类
classicContext.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"
xmlns:p="http://www.springframework.org/schema/p"
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.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean id="boss" class="spring3.basic.annotation.compare.Boss" >
<property name="car" ref="car" />
<property name="office" ref="office" />
</bean>
<bean id="office" class="spring3.basic.annotation.compare.Office">
<property name= "officeNo" value= "002" />
</bean>
<bean id= "car" class = "spring3.basic.annotation.compare.Car">
<property name="brand" value="BMW X700" />
<property name="price" value="2000" />
</bean>
</beans>
编写测试类
ClassicBossDemo.java
package spring3.basic.annotation.compare;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ClassicBossDemo {
public static void main(String[] args) {
String[] locations = { "annotation/classicContext.xml" };
ApplicationContext ctx = new ClassPathXmlApplicationContext(locations);
Boss boss = (Boss)ctx.getBean("boss");
System.out.println(boss);
}
}
运行结果:
Car:brand:BMW X700,price:2000.0
Office:Office No:002
现在来看一下如果利用注释怎么做
首先介绍一下@Autowired注释
需要被注入的业务类的属性,一般是通过设置set方法后,再通过spring的配置文件
进行注入
如果设置了@Autowired自动绑定后,spring会自动根据ByType的形式去寻找对应类型下的类
在配置文件中,我们需要做的是
1. 指定spring通过annotation来注入
<context:annotation-config />
2. 指定注入类的搜索包
<context:component-scan base-package="spring3.basic.annotation.compare" />
如果同一个类有两个实例,需要去注入,怎么办呢?
我们可以通过@Qualifier关键字,把默认的ByType注入改为ByName注入
@component关键字
可以让我们省去在配置文件中实例化bean,可以把它和配置文件结合使用
因为,默认使用@component实例化类,类的成员属性是不赋值的,如果需要初始化
属性,还得使用配置文件
说了那么多了,下面来看一下代码
Farm.java
package spring3.basic.annotation.compare;
import org.springframework.stereotype.Component;
public class Farm {
private String farmNo;
public String getFarmNo() {
return farmNo;
}
public void setFarmNo(String farmNo) {
this.farmNo = farmNo;
}
@Override
public String toString() {
return "Farm No:" + farmNo;
}
}
Cow.java
package spring3.basic.annotation.compare;
import org.springframework.stereotype.Component;
public class Cow {
private String color;
private double price;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Color: " + color + "," + "Price: " + price;
}
}
Peasant.java(业务主类)
package spring3.basic.annotation.compare;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
public class Peasant {
@Autowired
@Qualifier("whitecow")
private Cow cow;
@Autowired
private Farm farm;
public Cow getCow() {
return cow;
}
public Farm getFarm() {
return farm;
}
@Override
public String toString() {
return "Cow: " + cow + "\n" + "Farm: " + farm;
}
}
annotationContext.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"
xmlns:p="http://www.springframework.org/schema/p"
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.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config />
<context:component-scan base-package="spring3.basic.annotation.compare" />
<bean id="farm" class="spring3.basic.annotation.compare.Farm">
<property name= "farmNo" value= "f001" />
</bean>
<bean id= "whitecow" class = "spring3.basic.annotation.compare.Cow">
<property name="color" value="white" />
<property name="price" value="1000" />
</bean>
<bean id= "blackcow" class = "spring3.basic.annotation.compare.Cow">
<property name="color" value="black" />
<property name="price" value="1200" />
</bean>
</beans>
编写测试类
AnnotationPeasantDemo.java
package spring3.basic.annotation.compare;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AnnotationPeasantDemo {
public static void main(String[] args) {
ApplicationContext ctx =
new ClassPathXmlApplicationContext("annotation/annotationContext.xml");
Peasant peasant = (Peasant)ctx.getBean("peasant");
System.out.println(peasant);
}
}
运行结果:
Cow: Color: white,Price: 1000.0
Farm: Farm No:f001
分享到:
相关推荐
【Spring Annotation简介一】 ...在实际项目中,结合源码分析,可以更深入地理解Spring框架的工作原理,提升自己的技能水平。通过工具,如IDEA的Spring插件,可以方便地查看和管理注解,进一步优化开发流程。
本文将深入探讨如何利用Spring的注解式AOP和反射机制来实现日志记录,以便更好地理解和应用这些技术。 首先,让我们了解什么是AOP。面向切面编程是一种编程范式,它允许我们将关注点(如日志、事务管理等)从主业务...
本文将深入探讨Spring注解以及相关的源码分析,包括Spring MVC的部分。 首先,让我们了解Spring中的核心注解: 1. `@Component`:这是所有Spring组件的基础注解,用于标记一个类为Spring管理的bean。子注解如`@...
Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它将对象的创建和管理权交给了Spring容器,从而...通过对这些文件的分析和学习,你可以掌握如何在实际项目中应用Spring的IOC和注解注入技术。
在IT行业中,Spring AOP(面向切面编程)是一种强大的工具,它允许程序员在不修改原有业务代码的情况下,对程序进行功能增强。...在实际项目中,可以结合源码分析,深入理解其工作原理,以更好地利用这一强大的特性。
Spring MVC 教程 快速入门 深入分析 目录 一、前言 二、spring mvc 核心类与接口 三、spring mvc 核心流程图 四、spring mvc DispatcherServlet说明 五、spring mvc 双亲上下文的说明 六、springMVC-mvc.xml 配置...
Spring MVC教程中还提到了<mvc:annotation-driven/>的作用,它实际上是一个自动扫描控制器和映射注解的配置,为开发者简化了控制器的配置过程。 在文件的描述中提到了Spring 3.0版本,这是Spring框架的一个重要版本...
这篇博客"spring源代码分析:annotation支持的实现"探讨了Spring如何通过注解处理来实现组件扫描和依赖注入。我们将深入探讨以下几个关键知识点: 1. **组件扫描(Component Scanning)**: - 组件扫描是Spring...
通过分析这些文件,你可以更深入地理解如何将 Spring 的注解配置与 Hibernate 结合,实现一个完整的数据访问示例。 总结来说,这个 "Spring Hibernate Annotation demo" 展示了如何在 Spring 框架中使用注解配置来...
以下将详细分析Spring MVC的核心知识点。 一、前言:介绍了选择Spring MVC的原因和优势。Spring MVC简单易用,可以快速提高开发效率,且性能优秀,社区活跃,文档丰富。由于支持注解配置,使得框架更加易用。相较于...
7. **源码分析**:深入理解Spring注解的工作原理,需要查看其源码。通过阅读Spring的源码,可以了解到注解是如何被解析,如何与bean生命周期相结合,以及如何驱动Spring容器执行相应的操作。 8. **工具支持**:开发...
本篇将详细探讨"3Spring使用annotation方式autowire"这一主题,包括注解驱动的自动装配(Autowiring)以及相关的源码分析。 ### 一、注解驱动的自动装配 自动装配是Spring框架的一个核心特性,它允许框架自动管理...
总的来说,"完整版spring hibernate整合采用annotation"是一个涵盖多个知识点的主题,包括Spring注解驱动开发、Hibernate的ORM注解、Spring与Hibernate的整合配置、事务管理以及相关的开发工具使用。通过深入学习和...
### Spring MVC 快速入门深入分析 #### 一、Spring MVC 概述 Spring MVC 是 Spring Framework 的一个重要模块,主要用于构建 Web 应用程序。它遵循 MVC(Model-View-Controller)设计模式,将应用程序的不同关注点...
### Spring MVC 快速入门与深入分析 #### 一、Spring MVC 概述与优势 Spring MVC 是基于 Spring 框架的一个模块,用于构建 Web 应用程序。它遵循 MVC(Model-View-Controller)设计模式,将业务逻辑、数据、用户...
作者凭借超过十年的Java开发经验,从Spring 3.0版本出发,通过分析源代码的方式,对Spring框架的核心组件及主要功能模块进行了全面而深入的探讨。无论是对于初学者还是有经验的开发者而言,本书都极具参考价值。 ##...
<mvc:annotation-driven/>标签在Spring MVC的配置文件中起到了自动配置和简化配置的作用,自动注册了诸如处理器映射、控制器适配器、视图解析器等组件。 最后,springMVC.xml配置文件是整个Spring MVC应用的核心...
**Spring MVC 快速入门与深入分析** Spring MVC 是 Spring 框架的一部分,它是一个模型-视图-控制器(MVC)架构的实现,旨在简化企业级 Web 应用程序的开发。Spring 3.0 版本引入了注解配置,极大地提高了其易用性...