前面我们都是使用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("销毁");
}
分享到:
相关推荐
在非Spring管理的类中,如果你想使用Spring容器中的bean,有以下几种方式: - 实现ApplicationContextAware接口,Spring会在初始化时自动注入ApplicationContext。 - 使用`@Resource`注解,与`@Autowired`类似,...
- **容器管理事务**:Spring容器可以自动管理事务边界,简化事务处理。 5. **异常处理**:`MyBatis-Spring`支持将MyBatis异常转换为Spring的`DataAccessException`,便于统一异常处理策略。 #### 五、总结 ...
整合Ibatis 和 Spring 的主要目标是利用Spring的管理能力,将Ibatis的SqlSessionFactory和SqlSessionTemplate等组件纳入到Spring的上下文中,实现事务管理和对象的生命周期管理。以下是一些关键步骤: 1. **添加...
Spring 支持通过容器管理事务,这意味着事务可以在 Spring 的上下文中自动处理。这种方式简化了代码,避免了显式地开启和提交事务。 #### 第五章:使用 SqlSession - **5.1 SqlSessionSupport** `...
1. **组件扫描**:Spring支持通过注解的方式自动扫描指定包下的类,并将其纳入Spring容器管理。这通常通过`@ComponentScan`注解或者XML配置中的`<context:component-scan>`标签来实现。 - **示例**:`<context:...
整合Spring MVC和MyBatis的关键在于将MyBatis的SqlSession管理纳入Spring的IoC容器,这样可以利用Spring的事务管理功能,并简化代码。 1. **配置SqlSessionFactoryBean**:在Spring配置文件中配置...
通过引入相应的标签库和配置,可以方便地将这些框架的组件纳入Spring的管理范围。 总之,`ApplicationContext.xml`是Spring框架的核心配置文件,它定义了Spring应用的结构和行为。理解并熟练掌握`...
### 使用SpringSide开发Web项目知识点详解 #### SpringSide简介 SpringSide是一个以Spring Framework为核心,遵循Pragmatic风格的Java EE应用参考示例。它集成了当前Java EE世界的主流技术选型与最佳实践,旨在帮助...
通常我们会在主配置类(@SpringBootApplication注解的类)中定义一个@SpringBootApplicationScan,这个注解会扫描指定包及其子包下的所有类,寻找带有@Controller、@Service、@Repository和@Component等注解的组件,...
- **组件扫描**:`@SpringBootApplication`会触发组件扫描,查找带有`@Component`、`@Service`、`@Repository`和`@Controller`注解的类,并将它们纳入管理。 3. **Web开发** - **SpringMVC**:SpringBoot基于...
MyBatis可以与Spring集成,通过配置文件将数据库连接、SqlSessionFactory、Mapper接口的扫描等信息纳入Spring管理,使得事务管理和DAO操作更加方便。 6. **MyBatis中的#与$** #是预编译参数,可以防止SQL注入,...