spring--(14)利用注解创建bean与bean之间的关系

xml配置文件app

<!-- 扫描com.test.annotation包下全部的类 -->
	<context:component-scan base-package="com.test.annotation">
	</context:component-scan>

main文件ide

public static void main(String[] args) throws SQLException {
		
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		UserController userController = (UserController) ctx.getBean("userController");
		userController.excute();
		
		
	}

controller文件ui

@Controller
public class UserController {
	
	@Autowired
	private UserService userService;
	
	public void excute() {
		System.out.println("UserController excute...");
		userService.add();
	}
}

service文件code

@Service
public class UserService {
	
	@Autowired
	private UserRepository userRepository;
	
	public void add() {
		System.out.println("UserService add...");
		userRepository.save();
	}
}

接口文件component

public interface UserRepository {
	
	public void save();

}

接口实现层文件xml

@Repository
public class UserRepositoryImpl implements UserRepository {

	@Override
	public void save() {
		System.out.println("UserRepository Save...");
	}

}

利用@Autowired注解实现bean与bean之间的联系,上述main方法输出接口

UserController excute...
UserService add...
UserRepository Save...

2、IOC没有装配的bean
testObject文件get

//@Component
public class TestObject {
	
	public void name() {
		System.out.println("TestObject ...");
	}
}

这个bean没有加上@Component注解,所以ioc容器不会加载它,可是又须要用到它,则需进行以下处理it

@Repository
public class UserRepositoryImpl implements UserRepository {

	//设置required=false
	@Autowired(required=false)
	private TestObject testObject;
	
	@Override
	public void save() {
		System.out.println("UserRepository Save...");
		System.out.println(testObject);
	}
}

3、指定惟一bean
如今UserRepository接口有两个实现类,上面有一个,如今添加一个io

@Repository
public class UserJdbcRepositoryImpl implements UserRepository{

	@Override
	public void save() {
		System.out.println("UserJdbcRepositoryImpl save...");
	}
}

以下代码就不知道该调用哪一个实现类的save方法

@Service
public class UserService {
	
	@Autowired
	private UserRepository userRepository;
	
	public void add() {
		System.out.println("UserService add...");
		//这里不知道调用哪一个实现类的save方法
		userRepository.save();
	}
}

为了指定调用哪一个save方法,则须要指定实现接口的哪一个类,修改以下

@Service
public class UserService {
	
	@Autowired
	@Qualifier("userJdbcRepositoryImpl")
	private UserRepository userRepository;
	
	public void add() {
		System.out.println("UserService add...");
		//这里指定了实现类UserJdbcRepositoryImpl
		userRepository.save();
	}
}
相关文章
相关标签/搜索