通过使用@Autowired注解来配置bean之间的关系
@Autowired (Spring原理是后置处理器)会根据修饰的 构造器 属性 方法参数的类型自动装配
@Autowired所修饰的bean 必须加入spring 但可以使用@Autowired(required=false)设置可以为null
@Autowired 修饰的bean的类型有多个时 默认@Autowired比对bean的名字 名字不匹配会报错
- 如果关联的bean没有指定名字可以使用 @Qualifier(类的name)指定类的name
package note;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
@org.springframework.stereotype.Controller("controller")
public class Controller {
//@Autowired (Spring原理是后置处理器)会根据修饰的 构造器 属性 方法参数的类型自动装配
//@Autowired所修饰的bean 必须加入spring 但可以使用@Autowired(required=false)设置可以为空
//@Autowired 修饰的bean的类型有多个时 默认@Autowired比对bean的名字 名字不匹配会报错
//如果关联的bean没有指定名字可以使用 @Qualifier(类的name)指定类的name
@Autowired(required=false)
@Qualifier("service")
private Service service;
public void execute() {
System.out.println("Controller 执行");
service.add();
}
public Service getService() {
return service;
}
public void setService(Service service) {
this.service = service;
}
}
package note;
import org.springframework.beans.factory.annotation.Autowired;
@org.springframework.stereotype.Service
public class Service {
@Autowired
private Repository repository;
public void add() {
System.out.println("Service add");
repository.save();
}
public Repository getRepository() {
return repository;
}
public void setRepository(Repository repository) {
this.repository = repository;
}
}
package note;
@org.springframework.stereotype.Repository("repository")
public class Repository {
public void save() {
System.out.println("Repository 保存");
}
}
配置:
<context:component-scan base-package="note"></context:component-scan>
使用
/**
* 注解 配置 bean关系
*/
public static void testScanBean() {
ApplicationContext ctx = new ClassPathXmlApplicationContext("scanb.xml");
Controller controller=ctx.getBean("controller",Controller.class);
controller.execute();
}