spring扫描包管理bean

来源:互联网 发布:大数据走势 找规律 编辑:程序博客网 时间:2024/05/20 11:33

一、spring扫描包规则以及spring配置

<?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"/>  //base-package可以扫描该包以及子包
</beans>

为了解决较大项目中有较多组件带来的配置文件体积臃肿的问题,spring2.5引入了组件自动扫描的机制,它可以在类路径下寻找标注了@Component、@Service、

@Controller、@Repository注解的类,并把这些类纳入到spring容器中了管理(在基本包下哪个类又以上四个注解中的一个,就会被spring管理)。其中,@Service用于标注业

务层组件(service层或者bo层);@Controller用于标注控制层组件(主要是struts的Action);@Repository用于标注数据访问组件(Dao层);@Component 为泛指组件,但

一个java类不好分类时,进行标注。


二、java类中加入注解

@Service
public class PersonServiceBean implements PersonService {
private PersonDao personDao;

@PostConstruct //初始化注解 相当于bean中的 init-method属性
public void init(){
System.out.println("初始化");
}

@PreDestroy //销毁注解 相当于bean中的 destroy-method
public void destory(){
System.out.println("开闭资源");
}

public void save(){
personDao.add();
}
}


@Repository
public class PersonDaoBean implements PersonDao {
public void add(){
System.out.println("执行PersonDaoBean中的add()方法");
}
}

service层和dao层的两个java类在加上相应的注解后,在启动容器的时候,spring自动扫描到该注解就会把这两个类放到spring中来管理。那么在getBean的时候就能够获

得这两个对象信息。


3)测试加上注解的类是否被spring自动扫描并管理

public class SpringTest {
@Test public void instanceSpring(){
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");

//spring 的自动扫描会把类名字第一个字母小写成为bean,也可以指定bean       在注解中指定@Service("personService")
PersonService personService = (PersonService)ctx.getBean("personServiceBean ");
ctx.close();
}
}

0 0