1、在注解注入方式中,首先要在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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config />
</<beans>
同时要引入apache开源组织的common-annotation.jar (JSR-250中的注解)。
2、在注解中应用到的注解:
@AutoWired和@Resource
(1)@AutoWired和@Resource的区别
@AutoWired默认按类型进行装配。
@Resource默认情况下按名称进行装配,当按名称搜素不到的情况下,再按类型进行装配。但是如果指定了name属性则就只按名称进行装配(@Resource(name="personDao"))。
3、按注解进行装配的例子
<?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-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config />
<bean id="personDao" class="com.cvicse.dao.impl.PersonDaoBean" />
<bean id="personService" class="com.cvicse.service.impl.PersonServiceBean"/>
</beans>
在程序中的应用
public class PersonServiceBean implements PersonService {
@Resource private PersonDao personDao;
private String name;
public void setPersonDao(PersonDao personDao) {
this.personDao = personDao;
}
public PersonServiceBean(){}
public PersonServiceBean(PersonDao personDao, String name) {
this.personDao = personDao;
this.name = name;
}
public void save(){
personDao.add();
}
}
在程序中标注了@Resource后,spring容器会默认根据名字进行在xml中搜素id为personDao的bean,如果搜索不到则按PersonDao 的接口去搜索相应的实现类型com.cvicse.dao.impl.PersonDaoBean。
@Autowired注解和前面的@resource用法是一样的。如果要将@Autowired的注解按名称来进行搜素,则需要如下的设置:
@Autowired@Qualifier("personDao")
另外,@Autowired有一个required的属性:
@Autowired(required=false) @Qualifier("personDao"):表示当在配置文件中搜索不到时就把该属性注入为null。
@Autowired(required=true) @Qualifier("personDao"):表示当在配置文件中搜索不到时抛异常。
4、自动装配
即在配置文件中设置相应的装配类型由spring容器去进行装配。在spring的开发中不建议使用自动装配,因为自动装配会发生预想不到的未知的错误。
Autowired属性取值如下:
byType: 按照类型自动装配,可以根据属性的类型,在容器中寻找跟类型匹配的bean。如果发现多个,那么会抛出异常。如果没有找到,即属性值为null.
byName: 按照名称装配,可以根据属性的名称,在容器中寻找跟该属性名相同的bean,如果没有找到,即属性值为null。
constructor : 与byType的方式类似,不同之处在于它应用于构造器参数。如果在人那个其中没有找
到,即属性值为null。
autodetect :通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。(如果发现默认的构造器,那么将使用byType方式)
public class PersonServiceBean implements PersonService {
private PersonDao personDao;
private String name;
public PersonServiceBean() {
}
public void save()
{
personDao.save();
}
}
配置文件的配置如下:
<bean id="personDao" class="com.cvicse.dao.PersonDao"/>
<bean id="personServiceBean"
class="com.cvicse.service.impl.PersonServiceBean" autowire="byType"/>
5、自动扫描方式注入组件
前面我们都是使用XML的bean定义来配置组件。在一个稍大的项目中,通常会有上百个组件,如果这些组件采用xml的bean定义来配置,显然会增加配置文件的体积,查找及维护起来也不太方便。Spring2.5为我们引入了组件自动扫描机制,它可以在类路径下寻找标注了@Component、@Service、@Controller、@Repository注解的类,并把这些类纳入到spring的容其中管理。它的作用和在xml文件中使用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-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="com.cvicse"/>
</bean>
其中,base-package就是要扫描的包以及子包
@Service用于标注业务层组件
@Controller用于标注控制层组件(如struts中的action)
@Repository用于标注数据访问层组件,即DAO
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
import org.springframework.stereotype.Repository;
@Repository
public class PersonDao {
public void save() {
System.out.println("save");
}
}
这样,当容器扫描到此类的时候就纳入了容器里。
import org.springframework.stereotype.Service;
import com.cvicse.dao.PersonDao;
import com.cvicse.service.PersonService;
@Service
public class PersonServiceBean implements PersonService {
@Resource private PersonDao personDao;
public void setPersonDao(PersonDao personDao) {
this.personDao = personDao;
}
public void save()
{
personDao.save();
}
}
这样我们如何调用此bean?也没有配置文件里的id.spring规范这样规定:在自动扫描的情况下,要得到一个容器管理的bean,可以提供bean的全名,但是第一个字符小写!
ApplicationContext ctx = new
ClassPathXmlApplicationContext("beans.xml");
PersonService personService =
(PersonService)ctx.getBean("personServiceBean ");
personService.save();
当然,可以自己指定被调用的时候用的名称(默认都是单例模式,即scope=singleton)
@Service(“personService”)
public class PersonServiceBean implements PersonService
如果要改成原型模式怎么做呢?这样
@Service(“personService”) @Scope(“prototype”)
public class PersonServiceBean implements PersonService
但是这样如何实现指定初始化和销毁方法呢?spring采用的是注解方式!
分享到:
相关推荐
在IT行业中,Spring框架是Java开发领域中一个极为...通过阅读《Spring之IOC示例》这篇博客(博文链接:https://huangminwen.iteye.com/blog/1041298),可以更深入地理解Spring的IOC机制,并学习如何在实际项目中应用。
这篇博客“java模拟spring ioc”很可能是探讨如何在没有Spring框架的情况下,使用纯Java代码来实现类似Spring的IOC功能。以下将详细介绍Spring的IOC和DI概念以及如何模拟这些概念。 **依赖注入(Dependency ...
《Spring入门:Spring概述与Spring IoC》是针对初学者的一篇教程,旨在引导开发者进入Spring框架的世界。本文将深入探讨Spring的核心概念,特别是Spring的Inversion of Control(IoC,控制反转)特性,以及如何在...
本篇文章将详细探讨如何通过反射机制来实现一个简单的Java IOC容器,以此来模仿Spring框架的行为。 首先,理解控制反转(IOC)的概念至关重要。在传统的编程模式中,对象通常自行创建依赖对象,而在IOC中,这种创建...
本资源是一篇关于学习和应用SSM框架(Spring、SpringMVC、MyBatis)的学习记录系列文章中的第六天...通过学习这篇文章,你将会对Spring框架有一个初步的了解,并能够使用Spring的IoC容器实现控制反转和简单工厂模式。
本篇将深入探讨Spring的这两个核心概念,并通过实际操作加深理解。 **一、Spring的IOC(控制反转)** IOC,即控制反转,是一种设计思想,其核心理念是将对象的创建和管理交给容器来处理,而不是由对象自身负责。在...
本篇文章将详细探讨Spring IoC的体系结构设计,以及如何实现这些设计理念。 首先,Spring的IoC容器基于BeanFactory接口,这是容器的基础规范,它定义了如何管理和创建Bean。BeanFactory提供了诸如获取Bean实例、...
在本篇Spring学习笔记中,我们将深入探讨Spring的基本概念,包括bean的配置、依赖注入、IOC容器以及Bean的实例化方式。 首先,Spring中的核心概念是bean。Bean是Spring框架中的基本构建块,它们是被管理的对象,...
### 学习笔记:尚硅谷Spring6基础篇 #### 一、Spring框架概述 ##### 1.1 Spring是什么? Spring是一款主流的Java EE轻量级开源框架,由“Spring之父”Rod Johnson提出并创立。Spring的主要目标是简化Java企业级...
### Spring.NET学习笔记-实现一个简易的IoC框架 #### 一、背景介绍与理论基础 在.NET领域中,Spring.NET框架是一个非常重要的轻量级框架,它支持依赖注入(Dependency Injection, DI)和面向切面编程(Aspect ...
在本篇博文中,我们将深入探讨Spring框架的基础概念,特别是其核心特性——控制反转(Inversion of Control,IoC)容器。IoC容器是Spring框架的基石,它负责管理对象的生命周期和对象间的依赖关系。通过IoC,我们...
标题中的"spring-01-ioc1.rar"表明这是一个关于Spring框架中控制反转(Inversion of Control,简称IoC)的初级教程资源。Spring是Java领域广泛应用的一个轻量级开源框架,它的核心特性就是IoC,它使得应用程序的组件...
### Spring学习笔记(最新版) #### 一、Spring框架简介 Spring框架是一个广泛使用的轻量级企业级应用框架,它提供了全面的解决方案来构建复杂的Java应用程序。Spring的核心特性包括依赖注入(Dependency Injection,...
在学习Spring框架时,首先需要了解其主要模块,这些模块可以分为几个核心领域: 1. 核心容器:主要包括BeanFactory和ApplicationContext两个接口,它们是Spring框架的核心,负责实例化、配置和管理应用程序中的对象...
Spring系列第2篇:控制反转(IoC)与依赖注入(DI)。Spring系列第3篇:Spring容器基本使用及原理。Spring系列第4篇:xml中bean定义详解(-)Spring系列第5篇:创建bean实例这些方式你们都知道?Spring系列第6篇:玩转...
基于以上分析,我们可以期待这篇"spring学习笔记(3.20)"中包含以下知识点: 1. **Spring框架基础**:介绍Spring的基本概念、架构和核心组件,如IoC(Inversion of Control,控制反转)和DI(Dependency Injection,...
【标题】"Spring学习笔记(三)"主要涵盖了Spring框架的核心概念和使用,特别是关于Spring的依赖注入(Dependency Injection,简称DI)以及AOP(面向切面编程)的应用。这篇笔记可能详细介绍了如何通过XML配置或者Java...
标题中的"Spring学习笔记之一“why spring”"表明了这篇笔记主要探讨的是Spring框架的核心价值和使用背景。在IT行业中,Spring是一个广泛使用的Java企业级应用开发框架,它以其依赖注入(Dependency Injection,DI)...
在本篇 Spring 学习笔记中,我们将探讨 Spring 的入门、优点、组成以及重要的IOC理论。 1. **Spring 简介** Spring 是一个开源的、免费的 Java 框架,它的目标是减少企业级开发的复杂性。它集成了许多现有的技术,...
1. **Spring入门学习前导篇**: 在开始Spring的学习之前,了解Spring的基本概念和历史背景是必要的。Spring框架起源于2003年,由Rod Johnson创建,旨在解决企业应用开发中的复杂性问题。Spring通过提供IoC容器和AOP...