Spring2.5为我们引入了组件自动扫描机制,它可以在类路径下寻找标记了@Component、@Service、@Controller、@Repository注解的类,并把这些类纳入到spring容器中管理,它的作用和在xml中使用bean节点配置组件一样。

1. 引入context命名空间(在Spring的配置文件中),并打开组件自动扫描配置,并指定要纳入管理的命名空间(Spring自动扫描命名空间下的及命名空间子级下的所有类),配置文件如下:

<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.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
	<context:component-scan base-package="cn" /> <!-- 自动扫描配置节点 -->
</beans>

2.在ServiceBean中加入注解,使用@Service注解:

@Service @Scope("prototype")
public class PersonServiceImpl implements PersonIService {
@Resource
private PersonIDao personIDao; public void setPersonIDao(PersonIDao personIDao) {
this.personIDao = personIDao;
}
public PersonIDao getPersonIDao() {
return personIDao;
}
@Override
public void save() {
personIDao.save();
}
}

3.在daoBean中加入注解@Repository:

@Repository
public class PersonDaoImpl implements PersonIDao{
@Override
public void save() {
System.out.println("我是dao的Save方法");
}
}

测试代码:

	@Test
public void test4() {
AbstractApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
PersonIService personIService=(PersonIService)ac.getBean("personServiceImpl");
personIService.save();
}

注:如果在ServiceBean中不在@Service中指定name,那默认在getBean时,bean的name是ServiceBean的名称(首字母小写);

还可以为ServiceBean指定单独的name,通过特定的name获取Bean:

@Service("personIService")
public class PersonServiceImpl implements PersonIService {

DaoBean也是一样的,也可以指定name:

@Repository("personIDao")
public class PersonDaoImpl implements PersonIDao{

4.在ServiceBean中还可以通过@Scope来指定ServiceBean的作用域:

@Scope("prototype") 可以保证当有请求的时候都创建一个Action对象

@Scope("prototype")
值有:singleton,prototype,session,request,session,globalSession
@Service("personIService") @Scope("prototype")
public class PersonServiceImpl implements PersonIService {

测试代码:

@Test
public void test4() {
AbstractApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
PersonIService personIService=(PersonIService)ac.getBean("personIService");
PersonIService personIService2=(PersonIService)ac.getBean("personIService");
System.out.println(personIService==personIService2);
}

5.@PostConstruct 和@PreDestroy 可以指定当Bean初始化和销毁的时候能够执行的方法:

@PostConstruct 

相当于init-method,使用在方法上,当Bean初始化时执行。

 

@PreDestroy 

相当于destory-method,使用在方法上,当Bean销毁时执行。

	@PostConstruct
public void initBean(){
System.out.println("被实例之前调用");
}
@PreDestroy
public void destoryBean(){
System.out.println("实例被关闭之后调用");
}

测试代码:

	@Test
public void test4() {
AbstractApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
PersonIService personIService=(PersonIService)ac.getBean("personIService");
personIService.save();
ac.close();
}

Spring、Spring自动扫描和管理Bean的更多相关文章

  1. (转)让Spring自动扫描和管理Bean

    http://blog.csdn.net/yerenyuan_pku/article/details/52861403 前面的例子我们都是使用XML的bean定义来配置组件.在一个稍大的项目中,通常会 ...

  2. Spring第八发—自动装配及让Spring自动扫描和管理Bean

    依赖注入–自动装配依赖对象(了解即可) 对于自动装配,大家了解一下就可以了,实在不推荐大家使用.例子: byName:按名称装配,可以根据属性的名称,在容器中寻找跟该属性名相同的bean,如果没有找到 ...

  3. Spring的自动扫描与管理

    通过在classpath自动扫描方式把组件纳入spring容器中管理 前面的例子我们都是使用XML的bean定义来配置组件.在一个稍大的项目中,通常会有上百个组件,如果这些这组件采用xml的bean定 ...

  4. Spring《六》管理Bean

    BeanWrapper BeanFactory ApplicationContext 1.通常情况下使用BeanFactory.ApplicationContext 2.ApplicationCont ...

  5. Spring中管理Bean以及解析XML

    Spring是分层的轻量级框架 以IoC(Inverse of Control 反转控制)和AOP(Aspect Oriented Programming 面向切面编程)为核心 应用Spring的好处 ...

  6. Spring实战3:装配bean的进阶知识

    主要内容: Environments and profiles Conditional bean declaration 处理自动装配的歧义 bean的作用域 The Spring Expressio ...

  7. spring 声明式事务管理

    简单理解事务: 比如你去ATM机取5000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉5000元钱:然后ATM出5000元钱.这两个步骤必须是要么都执行要么都不执行.如果银行卡扣除了5000块但 ...

  8. Spring学习-- IOC 容器中 bean 的生命周期

    Spring IOC 容器可以管理 bean 的生命周期 , Spring 允许在 bean 声明周期的特定点执行定制的任务. Spring IOC 容器对 bean 的生命周期进行管理的过程: 通过 ...

  9. Spring4.0学习笔记(5) —— 管理bean的生命周期

    Spring IOC 容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的任务 Spring IOC 容器对Bean的生命周期进行管理的过程: 1.通过构造器或工厂方法 ...

随机推荐

  1. SQL Server 存储过程自启动

    前期准备: use master; create table LoginLog(LoginName nvarchar(32),LoginTime datetime); create procedure ...

  2. 检测android的网络链接状态

    http://www.oschina.net/question/100267_61129?sort=default&p=1#tags_nav http://www.cnblogs.com/to ...

  3. linux下so动态库一些不为人知的秘密(上)

    linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名.二者都使用广泛.本文主要讲动态库方面知识.        基本上每一个linux 程序都至少会有一个动态库,查看某个程序使 ...

  4. 区间dp-hdu-4745-Two Rabbits

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4745 题目意思: 给n个环状的数,A.B两人沿相反的方向走,每单位时间走一步,要求相同时间两人到达相 ...

  5. Connect the Cities(prime)

    Connect the Cities Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) ...

  6. Android 开源框架ActionBarSherlock 和 ViewPager 仿网易新闻客户端

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/9971721 大家都知道Android的ActionBar是在3.0以上才有的,那么在3 ...

  7. 如何用SQL SERVER 2005连接SQL SERVER 2008

    原先使用sql server 2005数据库,后来由于工作需要升级为sql server 2008 开发版,升级过程很简单,基本没有什么问题 下面主要说说,如何使用sql server 2005 st ...

  8. Emmet 插件使用教程

    1)使用 Emmet 生成 HTML 的语法详解生成 HTML 文档初始结构 HTML 文档的初始结构,就是包括 doctype.html.head.body 以及 meta 等内容.你只需要输入一个 ...

  9. Android环境开发搭建

    今天第一次接触安卓,从开发环境的配置到程序的运行,足足搞了一天,也没有整出来. 1.安装JDK 在JDK官网上下载了最新的JDK,安装成功后进行环境的配置.JAVA_HOME:C:\Program F ...

  10. windows不能在本地计算机启动SQL Server(MSSQLSERVER)

    windows不能在本地计算机启动sql server 在登录数据库的时候,发现数据库不能登录,提示[无法连接到实例],很明显这是因为数据库服务没有启动导致的,我们打开[服务]启动相应的SQL数据库服 ...