spring自动装配Bean的五种方式

  1. no:默认方式,手动装配方式,需要通过ref设定bean的依赖关系
  2. byName:根据bean的名字进行装配,当一个bean的名称和其他bean的属性一致,则自动装配
  3. byType:根据bean的类型进行装配,当一个bean的属性类型与其他bean的属性的数据类型一致,则自动装配
  4. constructor:根据构造器进行装配,与 byType 类似,如果bean的构造器有与其他bean类型相同的属性,则进行自动装配
  5. autodetect:如果有默认构造器,则以constructor方式进行装配,否则以byType方式进行装配

(1)no 默认装配方式
示例代码

public class UserServiceImpl implements UserService{

	@Override
	public void query() {
		// TODO Auto-generated method stub
		System.out.println("装配完成");
	}	
}
public class UserDao {

	private UserServiceImpl userServiceImpl;
	
	public void query() {
		userServiceImpl.query();
		System.out.println("Dao执行");
	}
	
	public void setUserServiceImpl(UserServiceImpl userServiceImpl) {
		this.userServiceImpl = userServiceImpl;
	}	
}



 
  

    

public static void main(String[] args) {
		// TODO Auto-generated method stub
		ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
		//UserService userService = (UserService)ac.getBean("userServiceImpl");
		//userService.query();
		UserDao dao = ac.getBean(UserDao.class);
		dao.query();
	}

可以看到,dao执行了自身的query方法

(2)使用 byName 自动装配

只需求修改 xml 配置为


  

    

就可以自动装配,需要注意的是,byName方法下,setter方法要与bean的id对应,如bean的id为userServiceImpl,则setter方法就应该是setUserServiceImpl,否则会报错,例如将UserDao改成

public class UserDao {
	
	private UserServiceImpl userServiceImpl1;
	
	public void query() {
		userServiceImpl1.query();
		System.out.println("Dao执行");
	}

	public void setUserServiceImpl1(UserServiceImpl userServiceImpl) {
		this.userServiceImpl1 = userServiceImpl;
	}
}

则运行出错。

(3)使用 byType 方式自动装配
只需将 autowire 的值改成byType即可,需要注意的是,setter方法的属性必须与bean引用的类的类型相同

(4)使用 constructor 方式自动装配
使用构造器自动装配,只需将 bean 修改成如下

public class UserDao {
	
	private UserServiceImpl userServiceImpl;
	
	public UserDao(UserServiceImpl userServiceImpl) {
		this.userServiceImpl = userServiceImpl;
	}
	
	public void query() {
		userServiceImpl.query();
		System.out.println("Dao执行");
	}

	/*public void setUserServiceImp(UserServiceImpl userServiceImpl) {
		this.userServiceImpl = userServiceImpl;
	}*/
}

并将 autowire 的值改成 constructor 即可

(5)使用 autodetect 方式自动装配
该方法会判断是否有默认构造器,如果有,则按照构造器装配,否则按照 byType 进行装配

你可能感兴趣的:(spring)