前面我们都是使用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="cn.itcast"/>
</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 cn.itcast.dao.PersonDao;
import cn.itcast.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采用的是注解方式!
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@PostConstruct
public void init(){
System.out.println("初始化");
}
@PreDestroy
public void destroy(){
System.out.println("销毁");
}
分享到:
相关推荐
NULL 博文链接:https://huangminwen.iteye.com/blog/1486843
实现将一个接口动态代理,并将该代理对象在spring容器初始化完成前注册到spring容器中。实现可以通过@Autowired等注释或其他方法从spring容器中获取该代理对象
在非spring注解类中使用spring容器中的bean_普通类中使用yml配置文件中的配置信息,在大数据采集项目中用到的,已经测试过了
spring自动扫描和管理Bean的示例
spring-context-indexer:类管理组件和Classpath扫描 spring-expression:表达式语句 切面编程: spring-aop:面向切面编程,CGLB,JDKProxy spring-aspects:集成AspectJ,Aop应用框架 spring-instrume
动态代理的方式注册到spring容器,对服务进行降级处理,获取注解类
1-11如何向Spring容器中注册bean的知识
mybatis注册到spring容器代码
spring容器启动和关闭时事件监听;spring容器启动和关闭时事件监听;spring容器启动和关闭时事件监听
使用了dom4j相关包,spring通过反射机制实现bean的创建等,完成bean的管理
动态扫描指定的包,包含其所有子包 扫描包下面的class文件,并将javaBean注册到spring环境
他们都可代表Spring容器,Spring容器是生成Bean实例的工厂,并且管理容器中的Bean。 Bean是Spring管理的基本单位,在基于Spring的Java EE应用中,所有的组件都被当成Bean处理,包括数据源、Hibernate的...
NULL 博文链接:https://gaozzsoft.iteye.com/blog/1523898
使用spring的Ioc容器组装各种组件总结
spring和mybatis框架整合,采用mapper代理自动扫描方式实现,已添加junit测试类。建议参照我的另一资源spring和mybatis整合(原始dao方式实现)对比
Spring注解开发组件扫描器.zip
自己练习简单例子SPING 2.5类自动扫描,自动注入功能,加一些自己说明需要的可以下载.
spring Ioc容器配置 IOC容器数据源配置 <!-- 配置数据源 --> destroy-method="close"> <value>org.gjt.mm.mysql.Driver <value>jdbc:mysql://localhost:3306/demo <value>root ...
2-11如何向Spring容器中注册bean的知识,脑图
Spring容器 .ppt Spring容器 .ppt