时间:2021-05-19
配置文件
前面的例子我们都是使用XML的bean定义来配置组件。在一个稍大的项目中,通常会有上百个组件,如果这些组件采用XML的bean定义来配置,显然会增加配置文件的体积,查找及维护起来也不太方便。
Spring2.5为我们引入了组件自动扫描机制,它可以在类路径底下寻找标注了@Component、@Service、@Controller、@Repository注解的类,并把这些类纳入进Spring容器中管理。
它的作用和在XML文件中使用bean节点配置组件是一样的。要使用自动扫描机制,我们需要打开以下配置信息:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://ponent-scan base-package="cn.itcast" /></beans>一个实例
然后使用@Service注解标注PersonServiceBean类,如下:
@Servicepublic class PersonServiceBean implements PersonService { private PersonDao personDao; public void setPersonDao(PersonDao personDao) { this.personDao = personDao; } @Override public void save() { personDao.add(); }}使用@Repository注解标注PersonDaoBean类,如下:
@Repositorypublic class PersonDaoBean implements PersonDao { @Override public void add() { System.out.println("执行PersonDaoBean中的add()方法"); }}最后,我们修改SpringTest类的代码为:
public class SpringTest { @Test public void instanceSpring() { AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); PersonService personService = (PersonService) ctx.getBean("personServiceBean"); PersonDao personDao = (PersonDao) ctx.getBean("personDaoBean"); System.out.println(personService); System.out.println(personDao); ctx.close(); }}测试instanceSpring()方法,可看到Eclipse控制台打印:
如果我们想使用按指定名称获取,可将PersonServiceBean类的代码修改为:
@Service("personService")public class PersonServiceBean implements PersonService { private PersonDao personDao; public void setPersonDao(PersonDao personDao) { this.personDao = personDao; } @Override public void save() { personDao.add(); }}这样,SpringTest类的代码应改为:
public class SpringTest { @Test public void instanceSpring() { AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); PersonService personService = (PersonService) ctx.getBean("personService"); System.out.println(personService); ctx.close(); }}测试instanceSpring()方法,可看到Eclipse控制台打印:
我们前面学过Spring管理的bean的作用域,我们就能知道以上Spring管理的两个bean的作用域默认是singleton。当然了,我们也可以更改Spring管理的bean的作用域,如将PersonServiceBean类的代码改为:
@Service("personService") @Scope("prototype")public class PersonServiceBean implements PersonService { private PersonDao personDao; public void setPersonDao(PersonDao personDao) { this.personDao = personDao; } @Override public void save() { personDao.add(); }}意味着Spring管理的PersonServiceBean这个bean的作用域变成prototype了,这时我们将SpringTest类的代码修改为:
public class SpringTest { @Test public void instanceSpring() { AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); PersonService personService1 = (PersonService) ctx.getBean("personService"); PersonService personService2 = (PersonService) ctx.getBean("personService"); System.out.println(personService1 == personService2); ctx.close(); }}测试instanceSpring()方法,可看到Eclipse控制台打印:
prototype作用域本来就意味着每次从Spring容器获取bean都是新的对象嘛。
若是通过在classpath路径下自动扫描方这种式把组件纳入Spring容器中管理,如何指定bean的初始化方法和销毁方法呢?这时我们就需要用到两个注解:@PostConstruct和@PreDestroy。为了试验,我们将PersonServiceBean类的代码修改为:
@Service("personService")public class PersonServiceBean implements PersonService { private PersonDao personDao; @PostConstruct public void init() { System.out.println("初始化资源"); } @PreDestroy public void destroy() { System.out.println("销毁、关闭资源"); } public void setPersonDao(PersonDao personDao) { this.personDao = personDao; } @Override public void save() { personDao.add(); }}接下来还要将SpringTest类的代码修改为:
public class SpringTest { @Test public void instanceSpring() { AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); PersonService personService = (PersonService) ctx.getBean("personService"); ctx.close(); }}这样,测试instanceSpring()方法,Eclipse控制台会打印:
如要查看源码,可点击让Spring自动扫描和管理Bean进行下载。
总结
以上所述是小编给大家介绍的spring自动扫描包,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
发现问题前几天用eclipse打包了一个jar包,jar包里面是定义的Spring的bean。然后将jar包放到lib下,设置spring的自动扫描这个jar包
如果你曾经使用过Spring,那你已经配过包扫描路径吧,那包扫描是怎么实现的呢?让我们自己写个包扫描上篇文章中介绍了使用File遍历的方式去进行包扫描,这篇主要
Spring从两个角度来实现自动化装配:组件扫描:Spring会自动发现应用上下文中所创建的bean。自动装配:Spring自动满足bean之间的依赖。案例:音
一,使用注解:在spring的配置文件applicationContext.xml中,加入注解扫描。配置项就配置了对指定的包进行扫描,以实现依赖注入。
myeclipse集成了ssh的包,我们无需再通过复制jar包的形式来导入spring,那么我们怎么来自动加入spring呢?软件名称:myeclipseV8.