`
8366
  • 浏览: 798767 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

第14讲 --让Spring自动扫描和管理Bean

阅读更多

 

 

通过在classpath自动扫描方式把组件纳入spring容器中管理
 
 
前面的例子我们都是使用XML的bean定义来配置组件。在一个稍大的项目中,通常会有上百个组件,如果这些这组件采用xml的bean定义来配置,显然会增加配置文件的体积,查找及维护起来也不太方便。spring2.5为我们引入了组件自动扫描机制,他可以在类路径底下寻找标注了@Component、@Service、@Controller、@Repository注解的类,并把这些类纳入进spring容器中管理。它的作用和在xml文件中使用bean节点配置组件是一样的。要使用自动扫描机制,我们需要打开以下配置信息:
<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="cn.itcast"/>
</beans>
其中base-package为需要扫描的包(含子包)。
@Service用于标注业务层组件、 @Controller用于标注控制层组件(如struts中的action)、@Repository用于标注数据访问组件,即DAO组件。而@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
 
 
目前的spring 只是区分了以上注解,但是在底层没有具体实现上的区分
 
验证步骤:
 
(1) 修改beans.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">
       


        
     <!-- 扫描 cn.com.xinli包下以及子包种有 @Service @Controller @Repository @Component
          注解的类,一旦发现,则将其纳入到spring容器中管理
     -->
	<context:component-scan base-package="cn.com.xinli"></context:component-scan>

</beans>

 
(2) 给两个类加上   @Service  注解 PersionDaoBean 和 PersionServiceBean
 
(3) 写测试方法,由于我们使用的spring的自动扫描 注入bean,在等到bean的时候,就无法知道bean的名字,这里有一个默认的规则,就是你要得到的bean的名字就是你注解的类的 类名第一个字符小写

 

 

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
		PersionSevice ps=(PersionSevice)ctx.getBean("persionServiceBean");
		PersionDao pd=(PersionDao)ctx.getBean("persionDaoBean");
		System.out.println(ps);
		System.out.println(pd);

 

  

 
(4) 结果:
可见两个bean都被注入值了
注意:
a.我们也可以在注解中指定 bean的名字,以后根据注解指定名字得到bean  @Service("huxl")

b.我们也可以在注解中指定bean的 生成方式,默认是 单例 ,我们可以指定为 原型 @Service("huxl") @Scope("propotype")

c.也可以使用注解指定bean的初始化和销毁方法

 

                @PostConstruct
	public void init()
	{
		log.info("初始化资源");
	}
	@PreDestroy
	public void destory()
	{
		log.info("释放资源");
	}

 


 

 

 
分享到:
评论

相关推荐

    Spring 3 Reference中文

    4.10 类路径扫描和管理的组件.. 96 4.10.1 @Component和更多典型注解 97 4.10.2 自动检测类和bean 的注册. 97 4.10.3 使用过滤器来自定义扫描 98 4.10.4 使用组件定义bean 的元数据.. 99 ...

    Spring中文帮助文档

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知...

    Spring API

    2. Spring 2.0和 2.5的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 新的bean作用域 2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件...

    Spring攻略(第二版 中文高清版).part1

    第14章 Spring Portlet MVC框架 544 14.1 用Spring Portlet MVC开发一个简单的Portlet 544 14.1.1 问题 544 14.1.2 解决方案 545 14.1.3 工作原理 546 14.2 将Portlet请求映射到处理程序 553 14.2.1 ...

    Spring攻略(第二版 中文高清版).part2

    第14章 Spring Portlet MVC框架 544 14.1 用Spring Portlet MVC开发一个简单的Portlet 544 14.1.1 问题 544 14.1.2 解决方案 545 14.1.3 工作原理 546 14.2 将Portlet请求映射到处理程序 553 14.2.1 ...

    动力节点老杜最新版Spring6框架教程学习资料分享

    本套Spring教程基于...第十一点:Bean生命周期10步讲解法,其他视频最多讲7步。 通过本套教程的学习,可以让你不仅会使用Spring框架,还会让你精通框架底层原理。无论面试也好,实际开发也好,都会有极大的帮助。

    spring3.1中文参考文档

    第2章 Spring 3.0的新特性和增强 ............................................................................................................ 22 2.1 Java 5 .................................................

    互联网创意产品众筹平台

    问题一箩筐-扫描包,以及spring配置文件标签报错) h5 O# v1 e1 U# N │ 4.问题一箩筐-jdbc.properties属性文件设置错误,无法连接数据库, Q) {; h4 t( ?: r& ^ │ 5.问题一箩筐-关于url扩展名称问题 │ 6.问题一箩筐-...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    第4章 利用JDBC和JTA访问 数据库和管理全局事务 178 4.1 JDBC和容器管理的数据源 179 4.1.1 JDBC概述 179 4.1.2 使用JDBC执行数据库访问 180 4.1.3 使用WebLogic服务器管理的 数据源 182 4.1.4 使用JBoss服务器管理...

    java微信公众号MVC开发框架

    jwx是开源的java公众号开发MVC框架,基于spring配置文件和微信消息或事件注解,通过微信上下文处理一个或多个微信公众号服务请求。目的主要有两个,其一生封装微信请求xml消息为java实体对象,将返回对象转换为xml...

    JAVA上百实例源码以及开源项目源代码

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    JAVA上百实例源码以及开源项目

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

Global site tag (gtag.js) - Google Analytics