- 浏览: 1499242 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (798)
- struts2 (42)
- servlet (20)
- quartz (4)
- jquery & ajax (24)
- tomcat (5)
- javascript (15)
- struts1 (8)
- 搜索关键字及链接 (3)
- fckeditor (3)
- Apache (5)
- spring (22)
- linux (3)
- 企业应用 (8)
- 综合应用 (13)
- 服务器 (2)
- 数据库 (85)
- 性能调优 (21)
- 网络应用 (15)
- 缓存技术 (8)
- 设计模式 (39)
- 面试题 (7)
- 程序人生&前辈程序员 (29)
- java基础 (59)
- hibernate (75)
- log4j (4)
- http (11)
- 架构设计 (28)
- 网页设计 (12)
- java邮件 (4)
- 相关工具 (11)
- ognl (7)
- 工作笔记 (18)
- 知识面扩展 (12)
- oracle异常 (1)
- 正则表达式 (2)
- java异常 (5)
- 项目实践&管理 (1)
- 专业术语 (11)
- 网站参考 (1)
- 论坛话题 (2)
- web应用 (11)
- cxf&webservice (22)
- freemarker (3)
- 开源项目 (9)
- eos (1)
- ibatis (6)
- 自定义标签 (3)
- jsp (3)
- 内部非公开文档(注意:保存为草稿) (0)
- 国内外知名企业 (2)
- 网店 (3)
- 分页 (1)
- 消费者习惯 (2)
- 每日关注 (1)
- 商业信息 (18)
- 关注商业网站 (1)
- 生活常识 (3)
- 新闻 (2)
- xml&JSON (5)
- solaris (1)
- apache.common (3)
- BLOB/CLOB (1)
- lucene (2)
- JMS (14)
- 社会进程 (8)
- SSH扩展 (2)
- 消费心理 (1)
- 珠三角 (1)
- 设计文档 (1)
- XWork&webwork (1)
- 软件工程 (3)
- 数据库及链接 (1)
- RMI (2)
- 国内外知名企业&人物 (1)
最新评论
-
司c马:
简介易懂、
OutputStream和InputStream的区别 -
在世界的中心呼喚愛:
解决我的问题
Java获取客户端的真实IP地址 -
bo_hai:
都是些基本的概念呀!
SSO -
tian_4238:
哥们,你也是搞水利这块的吧。
巧用SQLQuery中的addScalar -
loveEVERYday:
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结
Spring将所有的bean都纳入到IOC中创建、管理和维护。对于大型的项目而言,项目中会有成百上千个bean,如果我们都在配置文件中配置,那么我们就会增加配置文件的体积,显得过于臃肿,过于庞大,查找维护起来也不太方便。
在Spring2.5中引入了组件自动扫描机制,通过在classpath自动扫描的方式把组件纳入到Spring容器中。这大大减少了程序员在配置XML文件上的时间,使得配置文件显得干净,整洁,便于维护。
这种机制的工作步骤是:
1.配置需要扫描的类;
2.在需要被纳入Spring容器的类上加上相应的注解;
3.Spring在类路径下寻找标注了注解的类,并把这些类纳入Spring容器中管理。
它的作用是和在XML文件中使用<bean>节点配置组件是一样的。
自动扫描组件的使用
第一步:配置applicationContext.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"
xmlns:p="http://www.springframework.org/schema/p"
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
">
<!-- 打开Spring组件自动扫面,并配置要扫描的基本包 -->
<context:component-scan base-package="com.springtest"></context:component-scan>
</beans>
注:<context:component-scan>节点用于通知Spring容器扫描组件,base-package属性用于指定将要被扫描的组件所在的包名称。
第二步:为需要被扫描的类添加相应的注解;注解的类型有以下几种:
· @Service 用于标注业务层组件;
· @Repository 用于标注数据访问层组件;
· @Controller 用于标注控制层组件(如:Struts中的action)
· @Component 表示泛型组件,当组件不好归类的时候,我们可以使用这个组件进行注解。
第三步:当为类添加完成注解后,我们需要测试相应的组件是否被纳入Spring容器,所以我们需要测试组件是否被扫描;如下:
@Test
public void testAddUser()
{
UserBiz userBiz = (UserBiz)context.getBean("userBizImpl");
System.out.println(userBiz);
}
如果输出不为空,则说明测试类已经被扫描并且纳入了Spring容器。
细节问题总结:
1.当我们进行测试时,用ApplicationContext对象的getBean()方法寻找组件。在之前的配置文件中我们会用<bean>标签的id属性去定义,在使用注解后怎样获得组建的id呢?
在这种情况下,Spring会将被标注注解的类名拿到,然后再将该类名的第一个字母变为小写,放到getBean()方法中。如:UserBizImpl类的组件Id就会是userBizImpl,获取时为context.getBean("userBizImpl");
那么,我们在使用注解时可以自定义组件的Id吗?
当然可以。我们需要在为相应的类添加注解时,在注解之后添加自定义的类名,例如:
@Service("userBiz")
public class UserBizImpl implements UserBiz {
……
}
当我们在获取该组件时,为context.getBean("userBiz);
2.在配置文件中我们可以对组件(bean)的作用域范围进行设置,它的默认值是单例模式,那么在添加注解的情况下,我们怎样设置组件的作用域范围呢?
我们可以直接在为类添加注解的同时,运用另一个注解@Scope("prototype")来设置,如下
@Service("userBiz")@Scope("prototype")
public class UserBizImpl implements UserBiz {
……
}
3.在使用注解时,为组件设置初始化和销毁方法:
在添加注解的相应的类中,如果想初始化或销毁某个方法,我们可以直接在方法上添加注解,如下:
@PostConstruct
public void addItem() {
System.out.println("初始化方法");
}
@PreDestroy
public void testItem() {
System.out.println("释放资源");
}
4.在使用Spring自动扫描组件后,怎样进行依赖注入?
运用注解@Resource和@Autowired,并为依赖对象设置名称,例如:
@Resource(name="userDao")
private UserDAO userDao = null;
首先它会根据名称去找Spring自动扫描的并加入到Spring容器的组件(bean),如果有相同的名称,则进行依赖注入,如果没有相同的名称。则会根据类型区寻找组件。
发表评论
-
Spring Framework 开发参考手册
2011-09-02 16:15 1459http://www.html.org.cn/books/sp ... -
相关知识和链接
2011-09-01 15:21 1243《spring攻略》译员博客http://digitalson ... -
spring简述
2011-08-31 16:25 1258背景 Rod Johnson在2002年编著的《Expert ... -
传智播客_spring_PPT_黎活明
2011-08-05 16:44 0传智播客_spring_PPT_黎活明.ppt -
spring 中的singleton和ClassLoader中的单例
2011-08-03 15:50 2531http://www.iteye.com/topic/7186 ... -
Spring AOP原理及拦截器
2011-07-11 14:25 2177原理AOP(Aspect Oriented Progr ... -
Spring AOP: Spring之面向方面编程
2011-07-11 14:12 6185.1. 概念 ... -
AOP
2011-07-11 14:10 1449What is AOP?AOP即Aspect-Orie ... -
Spring技术内幕——深入解析Spring架构与设计原理(五)Spring与远端调用
2011-07-04 10:31 1426http://jiwenke.iteye.com/blog/5 ... -
Spring事物笔记
2011-06-14 23:01 1789/**什么异常时才回滚**/ Spring事务策略由Pl ... -
Spring in Action 学习笔记—第六章 远程调用
2010-12-24 10:09 1804远程调用是客户端应用 ... -
浅谈Spring事务隔离级别
2010-11-02 16:05 1182本文将介绍Spring事务隔 ... -
Spring事务的传播行为和隔离级别
2010-11-02 15:51 1400Spring中事务的定义:一、Propagation : ... -
spring aop 面向切面编程 如何来做一个强大的日志记录功能
2010-07-08 16:11 3593这个东西怎么做:spring aop 面向切面编程 如何来做一 ... -
Spring中单例bean访问非单例bean的第一种方式:方法注入
2010-07-08 15:20 2762方法注入在Spring中是很少用的,主要应用是, ... -
关于spring声明式事务管理异常处理的测试和小结
2010-07-08 10:51 1332关于spring事务管理以及异常处理的帖子,本论坛争论颇多,各 ... -
Spring源代码解析(一):IOC容器(1)
2010-07-01 11:00 1242ss -
spring ApplicationContext的实现
2010-07-01 10:37 1521spring为ApplicationContext提供的3 ... -
使用web.xml方式加载Spring时,获取Spring context的两种方式:
2010-06-25 14:10 16261、servlet方式加载时: 【web .xml】 ... -
Spring 框架的设计理念与设计模式分析(2)
2010-06-18 09:59 1621如何创建 Bean 实例并构建 Bean 的关系网 下面 ...
相关推荐
总而言之,Spring组件自动扫描机制极大地简化了Spring项目的配置,提高了开发效率。通过理解和应用@Component、@Repository、@Service和@Controller等注解,开发者可以让Spring自动地管理应用程序中的各种组件,从而...
在 Spring 2.5 中,引入了组件自动扫描机制,该机制可以在类路径下寻找标注了 @Component、@Service、@Controller、@Repository 注解的类,并将这些类纳入 Spring 容器中管理。 @Component、@Repository、@Service...
Spring自动扫描机制主要涉及以下几个关键概念: 1. **@Component**: 这是最基本的组件注解,可以标记在任何业务逻辑类上。Spring会将这些类视为bean并纳入管理。如果你需要更具体地表示某种类型的组件,可以使用它...
Spring组件扫描的原理基于Java的注解处理和反射机制。它会遍历指定包及其子包下的所有类,寻找带有特定注解(如@Service、@Component、@Repository、@Controller等)的类,并将这些类实例化为Spring容器中的bean。...
@ComponentScan注解是Spring Boot中实现组件自动装配的核心机制。通过合理配置组件扫描,可以提高应用程序的模块化程度、可维护性和启动性能。 本文通过深入分析@ComponentScan注解的工作原理和使用场景,为读者...
改变自动扫描的包【从零开始学Spring Boot】”涉及到的是Spring Boot框架中的组件扫描机制。在Spring Boot中,自动配置是其核心特性之一,它能够根据项目依赖来自动配置相应的Bean。默认情况下,Spring Boot会扫描...
在 Spring 框架中,组件扫描是指通过注解和 XML 配置来自动检测和加载Bean的过程。下面将详细介绍标签的使用方式和原理。 一、标签的作用 标签是 Spring 框架中用于组件扫描的核心标签。该标签可以自动检测和加载...
首先,我们来看`@Component`注解,它是所有Spring组件的基础注解。你可以将其放在任何类上,表示这个类是一个Spring管理的bean。如果需要对bean进行更具体的分类,可以使用它的衍生注解,如`@Service`(用于业务层)...
这个问题通常出现在使用Spring自动扫描机制来查找并加载JPA实体类时,如果这些实体类位于外部的jar包中,Spring可能无法正确识别和处理。 Spring通过`@EntityScan`或`<jpa:entity-manager-factory>`等配置元素来...
Spring框架中自动扫描包的机制是从Spring 2.5版本引入的,这个机制可以在类路径底下寻找标注了@Component、@Service、@Controller、@Repository注解的类,并把这些类纳入进Spring容器中管理。这个机制的作用和在XML...
### Spring自动扫描详解 #### 一、背景介绍 在Spring框架的发展过程中,为了更好地管理和配置Bean,Spring2.5引入了一种更为灵活便捷的方式——自动扫描(Auto Scan)。这一特性使得开发者无需在XML配置文件中显式...
在实际开发中,除了上述解决方法,还可以考虑使用其他策略,例如使用`@Import`注解导入特定的配置类,或者在主配置中显式声明Bean,以确保即使在自动扫描失败的情况下也能正常加载必要的组件。同时,持续关注Spring...
2. **创建Spring配置文件**:定义Bean,包括数据源、SqlSessionFactory、MapperScannerConfigurer(用于自动扫描Mapper接口)等。例如,可以配置`context.xml`来管理Spring的Bean,`servlet-context.xml`来配置...
7. **组件扫描**:Spring的`@Component`、`@Service`、`@Repository`和`@Controller`等注解用于标记组件类,配合`@ComponentScan`可以自动检测并注册这些类到IoC容器,从而实现bean的自动创建和依赖注入。...
除了依赖注入,Spring的自动扫描功能也是其核心特性之一。通过指定包扫描路径,Spring可以自动发现并管理所有标记为组件的类。在XML配置中,我们使用`<context:component-scan>`标签来实现: ```xml ``` 这将扫描...
整体来看,AnnotationAwareAspectJAutoProxyCreator作为Spring AOP的核心组件,通过后置处理器机制和代理模式,实现了AOP的动态代理功能。开发者无需手动编写代理类,Spring的AOP框架自动识别和应用配置中的AOP规则...