`

Spring annotation深入分析

 
阅读更多
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 Annotation简介一】 ...在实际项目中,结合源码分析,可以更深入地理解Spring框架的工作原理,提升自己的技能水平。通过工具,如IDEA的Spring插件,可以方便地查看和管理注解,进一步优化开发流程。

    利用 spring annotation AOP 反射 记录日志

    本文将深入探讨如何利用Spring的注解式AOP和反射机制来实现日志记录,以便更好地理解和应用这些技术。 首先,让我们了解什么是AOP。面向切面编程是一种编程范式,它允许我们将关注点(如日志、事务管理等)从主业务...

    springAnnotation.zip

    本文将深入探讨Spring注解以及相关的源码分析,包括Spring MVC的部分。 首先,让我们了解Spring中的核心注解: 1. `@Component`:这是所有Spring组件的基础注解,用于标记一个类为Spring管理的bean。子注解如`@...

    Spring IOC Annotation 注入 学习实例

    Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它将对象的创建和管理权交给了Spring容器,从而...通过对这些文件的分析和学习,你可以掌握如何在实际项目中应用Spring的IOC和注解注入技术。

    spring aop实例annotation方法实现

    在IT行业中,Spring AOP(面向切面编程)是一种强大的工具,它允许程序员在不修改原有业务代码的情况下,对程序进行功能增强。...在实际项目中,可以结合源码分析,深入理解其工作原理,以更好地利用这一强大的特性。

    Spring MVC 教程 快速入门 深入分析

    Spring MVC 教程 快速入门 深入分析 目录 一、前言 二、spring mvc 核心类与接口 三、spring mvc 核心流程图 四、spring mvc DispatcherServlet说明 五、spring mvc 双亲上下文的说明 六、springMVC-mvc.xml 配置...

    Spring_MVC_教程_快速入门_深入分析 高清文字版PDF

    Spring MVC教程中还提到了&lt;mvc:annotation-driven/&gt;的作用,它实际上是一个自动扫描控制器和映射注解的配置,为开发者简化了控制器的配置过程。 在文件的描述中提到了Spring 3.0版本,这是Spring框架的一个重要版本...

    spring源代码分析:annotation支持的实现

    这篇博客"spring源代码分析:annotation支持的实现"探讨了Spring如何通过注解处理来实现组件扫描和依赖注入。我们将深入探讨以下几个关键知识点: 1. **组件扫描(Component Scanning)**: - 组件扫描是Spring...

    sping hibernate Annotation(注释配置) demo(例子)

    通过分析这些文件,你可以更深入地理解如何将 Spring 的注解配置与 Hibernate 结合,实现一个完整的数据访问示例。 总结来说,这个 "Spring Hibernate Annotation demo" 展示了如何在 Spring 框架中使用注解配置来...

    Spring MVC 教程快速入门 深入分析

    以下将详细分析Spring MVC的核心知识点。 一、前言:介绍了选择Spring MVC的原因和优势。Spring MVC简单易用,可以快速提高开发效率,且性能优秀,社区活跃,文档丰富。由于支持注解配置,使得框架更加易用。相较于...

    学习Spring笔记_Annotation(注解)_Component

    7. **源码分析**:深入理解Spring注解的工作原理,需要查看其源码。通过阅读Spring的源码,可以了解到注解是如何被解析,如何与bean生命周期相结合,以及如何驱动Spring容器执行相应的操作。 8. **工具支持**:开发...

    3Spring使用annotation方式autowire

    本篇将详细探讨"3Spring使用annotation方式autowire"这一主题,包括注解驱动的自动装配(Autowiring)以及相关的源码分析。 ### 一、注解驱动的自动装配 自动装配是Spring框架的一个核心特性,它允许框架自动管理...

    完整版spring hibernate整合采用annotation

    总的来说,"完整版spring hibernate整合采用annotation"是一个涵盖多个知识点的主题,包括Spring注解驱动开发、Hibernate的ORM注解、Spring与Hibernate的整合配置、事务管理以及相关的开发工具使用。通过深入学习和...

    spring mvc 快速入门深入分析

    ### Spring MVC 快速入门深入分析 #### 一、Spring MVC 概述 Spring MVC 是 Spring Framework 的一个重要模块,主要用于构建 Web 应用程序。它遵循 MVC(Model-View-Controller)设计模式,将应用程序的不同关注点...

    spring MVC快速入门-深入分析.pdf

    ### Spring MVC 快速入门与深入分析 #### 一、Spring MVC 概述与优势 Spring MVC 是基于 Spring 框架的一个模块,用于构建 Web 应用程序。它遵循 MVC(Model-View-Controller)设计模式,将业务逻辑、数据、用户...

    SPRING技术内幕+深入解析SPRING架构与设计 55M(下载地址)

    作者凭借超过十年的Java开发经验,从Spring 3.0版本出发,通过分析源代码的方式,对Spring框架的核心组件及主要功能模块进行了全面而深入的探讨。无论是对于初学者还是有经验的开发者而言,本书都极具参考价值。 ##...

    Spring MVC 教程,快速入门,深入分析

    &lt;mvc:annotation-driven/&gt;标签在Spring MVC的配置文件中起到了自动配置和简化配置的作用,自动注册了诸如处理器映射、控制器适配器、视图解析器等组件。 最后,springMVC.xml配置文件是整个Spring MVC应用的核心...

    Spring_MVC_教程_快速入门_深入分析

    **Spring MVC 快速入门与深入分析** Spring MVC 是 Spring 框架的一部分,它是一个模型-视图-控制器(MVC)架构的实现,旨在简化企业级 Web 应用程序的开发。Spring 3.0 版本引入了注解配置,极大地提高了其易用性...

Global site tag (gtag.js) - Google Analytics