`

知识点六:自动扫描方式把组件纳入(注册到)spring容器中管理

阅读更多
前面我们都是使用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("销毁");
	}
分享到:
评论

相关推荐

    17. Spring Boot普通类调用bean【从零开始学Spring Boot】

    在非Spring管理的类中,如果你想使用Spring容器中的bean,有以下几种方式: - 实现ApplicationContextAware接口,Spring会在初始化时自动注入ApplicationContext。 - 使用`@Resource`注解,与`@Autowired`类似,...

    MyBatis-Spring结合

    - **容器管理事务**:Spring容器可以自动管理事务边界,简化事务处理。 5. **异常处理**:`MyBatis-Spring`支持将MyBatis异常转换为Spring的`DataAccessException`,便于统一异常处理策略。 #### 五、总结 ...

    ibatis 与spring3整合

    整合Ibatis 和 Spring 的主要目标是利用Spring的管理能力,将Ibatis的SqlSessionFactory和SqlSessionTemplate等组件纳入到Spring的上下文中,实现事务管理和对象的生命周期管理。以下是一些关键步骤: 1. **添加...

    mybatis学习

    Spring 支持通过容器管理事务,这意味着事务可以在 Spring 的上下文中自动处理。这种方式简化了代码,避免了显式地开启和提交事务。 #### 第五章:使用 SqlSession - **5.1 SqlSessionSupport** `...

    SSH整合笔记和配置文

    1. **组件扫描**:Spring支持通过注解的方式自动扫描指定包下的类,并将其纳入Spring容器管理。这通常通过`@ComponentScan`注解或者XML配置中的`&lt;context:component-scan&gt;`标签来实现。 - **示例**:`&lt;context:...

    springmvc+mybatis完美框架

    整合Spring MVC和MyBatis的关键在于将MyBatis的SqlSession管理纳入Spring的IoC容器,这样可以利用Spring的事务管理功能,并简化代码。 1. **配置SqlSessionFactoryBean**:在Spring配置文件中配置...

    ApplicationContext.xml

    通过引入相应的标签库和配置,可以方便地将这些框架的组件纳入Spring的管理范围。 总之,`ApplicationContext.xml`是Spring框架的核心配置文件,它定义了Spring应用的结构和行为。理解并熟练掌握`...

    使用SpringSide开发Web项目

    ### 使用SpringSide开发Web项目知识点详解 #### SpringSide简介 SpringSide是一个以Spring Framework为核心,遵循Pragmatic风格的Java EE应用参考示例。它集成了当前Java EE世界的主流技术选型与最佳实践,旨在帮助...

    di-spring-boot

    通常我们会在主配置类(@SpringBootApplication注解的类)中定义一个@SpringBootApplicationScan,这个注解会扫描指定包及其子包下的所有类,寻找带有@Controller、@Service、@Repository和@Component等注解的组件,...

    04-springboot.zip

    - **组件扫描**:`@SpringBootApplication`会触发组件扫描,查找带有`@Component`、`@Service`、`@Repository`和`@Controller`注解的类,并将它们纳入管理。 3. **Web开发** - **SpringMVC**:SpringBoot基于...

    2021年java软件工程师面试基本题.docx

    MyBatis可以与Spring集成,通过配置文件将数据库连接、SqlSessionFactory、Mapper接口的扫描等信息纳入Spring管理,使得事务管理和DAO操作更加方便。 6. **MyBatis中的#与$** #是预编译参数,可以防止SQL注入,...

Global site tag (gtag.js) - Google Analytics