`
coolszy
  • 浏览: 1412458 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Spring学习笔记(9)----让Spring自动扫描和管理Bean

阅读更多
package com.szy.spring.service;

import org.springframework.stereotype.Service;

import com.szy.spring.dao.PersonDao;
@Service("service")
public class UserServiceImpl implements UserService
{
	private PersonDao personDaoBean;
	
	public void show()
	{
		personDaoBean.show();
	}

	public void setPersonDaoBean(PersonDao personDaoBean)
	{
		this.personDaoBean = personDaoBean;
	}
}

 在前面的例子中,都是使用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"
	xmlns:tx="http://www.springframework.org/schema/tx"
	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
				http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
	<context:component-scan base-package="com.szy.spring"></context:component-scan>
</beans>

 其中base-package为需要扫描的包(包括子包)

@Service用于标注业务层的组件,@Controller用于标注控制层组件(如struts中的action),@Repository用于标注数据访问组件,即DAO组件,而@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。但是在目前的spring版本中,这几个注解的作用是一样的,但是在以后可能会进行区分。

 

下面把先前的例子修改一下:

首先是PersonDaoBean类,修改如下

package com.szy.spring.dao;

import org.springframework.stereotype.Repository;

@Repository
//告诉spring这个类要交给spring管理,
public class PersonDaoBean implements PersonDao
{
	public void show()
	{
		System.out.println("执行PersonDaoBean中的add()方法");
	}
}

 

然后是UserServiceImpl类

package com.szy.spring.service;

import org.springframework.stereotype.Service;

import com.szy.spring.dao.PersonDao;
@Service
//把这个类交给spring管理,作为服务了。
public class UserServiceImpl implements UserService
{
	private PersonDao personDaoBean;
	
	public void show()
	{
		personDaoBean.show();
	}

	public void setPersonDaoBean(PersonDao personDaoBean)
	{
		this.personDaoBean = personDaoBean;
	}

	public PersonDao getPersonDaoBean()
	{
		return personDaoBean;
	}
}

 

 

 下面我们进行测试,原来的测试代码是userServiceImpl

ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
		UserService service=(UserService)ctx.getBean("userService");
		service.show();

 

其中userService是我们在配置文件中配置的bean的id。但是如今我们并没有id这个属性,在spring2.5中,默认的id是类的名称,但是开后是小写,也就是userServiceImpl,因此测试代码应修改如下:

AbstractApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
		UserService service=(UserService)ctx.getBean("userServiceImpl");
		System.out.println(service);

 

如果我们想自己命名的话,则只需在注解后加上括号,里面写入你希望的名字,如

@Service("userService")。

 

在spring中默认的是之生成一个bean实例,如果我们想每次调用都产生一个实例,则标注需如下配置

@Service @Scope("prototype")

 

在xml中我们还可以配置初始化方法和销毁方法,使用标注后只需如下标注

@PostConstruct
	public void init()
	{
		System.out.println("初始化");
	}
	@PreDestroy
	public void destory()
	{
		System.out.println("销毁");
	}

 

 使用注解后,我们的xml文件变得十分简单,因此建议大家在以后的开发中使用注解。

分享到:
评论
3 楼 nakin1991 2016-05-16  
[b][b][b][u][/u][/b][/b][/b]
2 楼 coolszy 2009-12-23  
bdifn 写道
搜索到你的文章,
我把这些类打成了JAR包.
比如
com.xx.qq下有 A类,B类,C类.都注解了@Component(value="a")或者@Service(value="a")的话
这些类怎么被Spring容器自动扫描加载.
<context:component-scan base-package="com.xx.qq" />

这样
通过context.getBean("a");取得的是没有a的定义在Spring容器中,怎么解决打成jar包问题呢.搜了半天没有搜出来,希望能解答一下,谢谢

我没有尝试过你的那种做法,所以不知道怎么解决。你可以到提问专区或者CSDN上发帖询问解决方法、
1 楼 bdifn 2009-12-23  
搜索到你的文章,
我把这些类打成了JAR包.
比如
com.xx.qq下有 A类,B类,C类.都注解了@Component(value="a")或者@Service(value="a")的话
这些类怎么被Spring容器自动扫描加载.
<context:component-scan base-package="com.xx.qq" />

这样
通过context.getBean("a");取得的是没有a的定义在Spring容器中,怎么解决打成jar包问题呢.搜了半天没有搜出来,希望能解答一下,谢谢

相关推荐

    Spring学习笔记+学习源码.zip

    这份"Spring学习笔记+学习源码.zip"资源包含了深入学习Spring及其相关技术的知识点,以及实践代码,对提升Spring技能将大有裨益。 首先,我们来详细讨论Spring框架的主要组件和功能: 1. **依赖注入(Dependency ...

    Spring2.5.6学习笔记-最新

    以上是 Spring 2.5.6 学习笔记中的关键知识点,通过这些基础知识的学习,开发者可以开始构建基于 Spring 框架的应用程序。接下来,可以进一步深入学习 Spring 的高级特性,如事务管理、安全性、Web 开发等方面的知识...

    Spring学习笔记-cqupt

    在本篇 Spring 学习笔记中,我们将探讨 Spring 的入门、优点、组成以及重要的IOC理论。 1. **Spring 简介** Spring 是一个开源的、免费的 Java 框架,它的目标是减少企业级开发的复杂性。它集成了许多现有的技术,...

    Spring学习笔记(精华全记录)

    ### Spring学习笔记(精华全记录) #### Spring框架概述 Spring框架源自Rod Johnson的个人项目,最初于2002年末发布。Spring并非一开始就作为一个完整的框架出现,而是从一个项目逐步发展而来。随着项目的成熟,...

    spring学习笔记

    ### Spring学习笔记知识点详解 #### 一、Spring框架概述 **Spring** 是一个开源的、分层的企业级应用开发框架,旨在简化Java EE应用程序的开发。它的主要目标是提高开发效率,减少耦合度,并提供一种更为简洁的...

    spring-boot学习笔记

    ### Spring Boot 学习笔记知识点总结 #### 一、Spring发展史 - **Spring1.x时代**:在Spring1.x的时代,主要通过XML文件来配置Bean。随着项目的规模扩大,XML配置文件的数量也随之增加,这导致开发人员需要频繁地...

    JSF2整合Spring3------JSF学习笔记4

    **JSF2整合Spring3——JSF学习笔记4** 在Java服务器端开发中,JavaServer Faces(JSF)和Spring框架都是重要的技术。JSF是一个用于构建用户界面的MVC(Model-View-Controller)框架,而Spring则是一个全面的企业级...

    Spring学习笔记&源码

    本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...

    Spring框架学习笔记

    Spring Boot是基于Spring框架的快速开发工具,它简化了Spring应用的初始搭建以及配置过程,通过内置的Tomcat服务器和自动配置功能,让开发者能够更快地启动和运行应用。 十、Spring Cloud Spring Cloud是建立在...

    Spring学习笔记.doc

    ### Spring学习笔记知识点详解 #### 一、Spring框架概述 **1.1 什么是Spring** Spring框架是一个开源的轻量级应用框架,主要用于简化企业级应用程序的开发过程。它的核心特性在于提供了一种灵活的方式来组织和...

    尚学堂Spring学习笔记

    "尚学堂Spring学习笔记" 本文档记录了尚学堂Spring学习笔记的重要知识点,涵盖了Spring配置文件的设置、普通属性的注入、自定义属性编辑器、公共属性的注入、Spring注解等内容。 一、Spring配置文件的设置 在...

    Spring学习笔记(6)----编码剖析Spring依赖注入的原理

    本篇学习笔记将深入剖析Spring依赖注入的原理,通过源码分析帮助我们理解这一核心机制。 首先,依赖注入允许我们解耦组件之间的关系,使得各个组件可以独立地进行开发、测试和维护。在Spring中,DI主要通过两种方式...

    Spring Boot核心技术-笔记-pdf版.pdf

    **Spring Boot核心技术详解** Spring Boot是由Pivotal团队提供的全新框架,其设计目标是为了简化Spring应用的...希望这份学习笔记能帮助你深入理解和掌握Spring Boot的精髓,祝你在Spring Boot的学习之路上一帆风顺!

    spring学习笔记(最新版)

    ### Spring学习笔记(最新版) #### 一、Spring框架简介 Spring框架是一个广泛使用的轻量级企业级应用框架,它提供了全面的解决方案来构建复杂的Java应用程序。Spring的核心特性包括依赖注入(Dependency Injection,...

    马士兵老师spring框架学习笔记

    马士兵老师是知名的Java教育专家,他的Spring框架学习笔记深入浅出,对于初学者和进阶者来说都是一份宝贵的资源。这份笔记涵盖了Spring的核心概念、配置、AOP(面向切面编程)、DI(依赖注入)等关键知识点。 1. **...

    Spring学习笔记(17)----使用Spring注解方式管理事务

    在本篇Spring学习笔记中,我们将探讨如何使用Spring框架的注解方式来管理事务,这是一种在现代Java应用中广泛采用的方法。Spring框架以其强大的依赖注入和面向切面编程能力,为事务管理提供了简洁且高效的解决方案。...

    Spring 学习笔记 spring帮助文档

    在本篇Spring学习笔记中,我们将深入探讨Spring的基本概念,包括bean的配置、依赖注入、IOC容器以及Bean的实例化方式。 首先,Spring中的核心概念是bean。Bean是Spring框架中的基本构建块,它们是被管理的对象,...

    Spring学习笔记(18)----使用Spring配置文件实现事务管理

    这篇"Spring学习笔记(18)----使用Spring配置文件实现事务管理"着重讲解如何通过Spring的XML配置来管理应用中的事务。这里我们将深入探讨相关知识点。 首先,Spring提供了两种事务管理方式:编程式事务管理和声明式...

Global site tag (gtag.js) - Google Analytics