
原来学过了通过xml来实现spring的配置,现在使用更简单的标签方式来实现相同的过程。
首先注意,xml的方式进行配置文件时,使用的是在自定义代码中调用ClassPathXmlApplicationContext("applicationContext.xml的路径")来生成一个context实例,然后调用context.getBean("对应类的Bean标签的id")来进行提取容器中构建的实例。也就是说,通过在配置文件外进行spring容器与实际实用类的匹配。
而当使用标签时,会发生一些改变。
1.首先,在spring配置文件(一般命名为applicationContext.xml)中XML配置文件的开头,需要引入contex命名空间的声明
xmlns:context="http://www.springframework.org/schema/context"
以及schemaLocation中是否有对应的XSD地址:
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
并且在spring配置文件(一般命名为applicationContext.xml)中添加扫描标签的标签<context:component-scan base-package="对应需要被扫描的类的上一级目录的路径"></context:component-scan>
需要注意的是,这里的base-package实际的扫描范围是本包的同级目录以及子目录,一般而言,将其设立为需要扫描的类的上级目录即可。
2.如果需要对某个类创建实例,那么就在该类的头顶填写标签:比如
@Component("a")
public class A{
.......................
}
理想情况下,当标签被@Component("a")被context:component-scan扫描到的一瞬间,这个类的实例就会出现在ioc容器中。
3.如果类中要注入其他类,比如:
@Component("b")
public class B{
@Autowired
@Qualifier("a")
A a;
......................
}
此时使用到了@Autowired@Qualifier这两个标签,@Autowired表示自动注入,如果不与@Qualifier进行搭配,那么此时的A a也会被创建,因为spring框架会自动匹配与该标签下的类相同名称的@Component标签,找到该标签后,会直接将容器中符合该标签的实例进行提取。
但是问题就出现在如果此时有多个类A对应的不同实例,比如为a1,a2,...,an,此时的提取就会出现问题。那么如何精确的提取出ak(假设需要的实例为ak)?此时就需要@Qualifier("ak")来进行辅助提取,@Qualifier中括号中的内容为对应需要被提取的标签id,通过这个标签id就能够正确匹配需要的实例。
这里的标签id指的是Component括号中的内容,比如@Component("b")中的"b"即为类B对应的实例的标签id。
如果不想使用这两个标签,可以使用@Resource(name="对应实例的bean标签对应id")。可以简单的理解@Resource(name="对应实例的bean标签对应id")就等于@Autowired@Qualifier("对应实例的bean标签对应id")

2285

被折叠的 条评论
为什么被折叠?



