虽然前面启用注解的时候,SPring配置文件中没有了Property属性标签,但是还是存在Bean标签,为了能够省掉Bean标签,可以使用<context:component-scan>(能完成的工作与前面的<context:annotation-config></context:annotation-config>一样的工作),还可以允许Spring自动检测Bean和定义Bean,这样能够省掉Bean标签
使用<context:component-scan base-package="implement"></context:component-scan>会自动扫描implement之下的所有包及其子包,并查找出能自动注册为Bean的类。但是SPring又是如何直到该扫描哪些Bean呢?我们的做法是在Bean类中加入Component注解,表明这个类被Spring扫描并且注册成为Bean类,此时默认的Id为首字母小写与类名一致。如果想要显示指定一个Bean的Id可以在Componet中加入属性值。demo如下:
如上图所示person为一接口,BlackMan,WhiteMan与YellowMan分别是它的实现类,Server是为test中的类服务的。BlackMan代码如下:
package implement;
import org.springframework.stereotype.Component;
import Interface.*;
@Component("blackMan")//显示定义Bean的Id
public class BlackMan implements person {
public String name="Anny livs african";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Server代码如下:
import org.springframework.stereotype.Component;
import Interface.*;
@Component("blackMan")//显示定义Bean的Id
public class BlackMan implements person {
public String name="Anny livs african";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Server代码如下:
package implement;
import javax.inject.Inject;
import javax.inject.Named;
import org.springframework.stereotype.Component;
import Interface.person;
@Component
public class Server {
@Inject
@Named("blackMan")//使用BlackMan的Bean注入
public person p;
public person getP() {
return p;
}
public void setP(person p) {
this.p = p;
}
import javax.inject.Inject;
import javax.inject.Named;
import org.springframework.stereotype.Component;
import Interface.person;
@Component
public class Server {
@Inject
@Named("blackMan")//使用BlackMan的Bean注入
public person p;
public person getP() {
return p;
}
public void setP(person p) {
this.p = p;
}
}
代码如下:
http://download.youkuaiyun.com/detail/muyundefeng/9478377