关键代码:
@Autowired或@Autowired(required=false) // 自动查找bean
@Qualifier("userRepository") // 指定使用userRepository Bean
配置:
<context:component-scan
base-package="com.shuoeasy.test"
>
</context:component-scan>详细:
UserController.java:
package com.shuoeasy.test.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import com.shuoeasy.test.service.UserService; // 表现层 @Controller public class UserController { @Autowired private UserService userService; public void execute(){ userService.add(); System.out.println("UserController execute"); } }
UserService.java:
package com.shuoeasy.test.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import com.shuoeasy.test.repository.UserRepository;
// 业务层
@Service
public class UserService {
private UserRepository userRepository;
@Autowired
@Qualifier("userRepository") // 指定使用userRepository Bean
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
// 注解下载参数里面
public void setUserRepository2(@Qualifier("userRepository") UserRepository userRepository) {
this.userRepository = userRepository;
}
public void add(){
userRepository.save();
System.out.println("UserService add");
}
}UserRepository.java:
package com.shuoeasy.test.repository; public interface UserRepository { void save(); }
UserRepositoryImpl.java:
package com.shuoeasy.test.repository.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.shuoeasy.test.component.User;
import com.shuoeasy.test.repository.UserRepository;
// 持久化层(可以重写名称)
@Repository("userRepository")
public class UserRepositoryImpl implements UserRepository{
@Autowired(required=false)
private User user;
public void save() {
System.out.println(user);
System.out.println("UserRepositoryImpl save");
}
}bean.xml:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"> <!-- 指定Spring IOC 容器扫描的包 base-package="com.shuoeasy.test": 引用的包路径 --> <context:component-scan base-package="com.shuoeasy.test" > </context:component-scan> </beans>
Main.xml:
package com.shuoeasy.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.shuoeasy.test.component.User;
import com.shuoeasy.test.controller.UserController;
import com.shuoeasy.test.repository.UserRepository;
import com.shuoeasy.test.service.UserService;
public class Main {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
// bean
User user = (User) ctx.getBean("user");
System.out.println("user->" + user);
// 表现层
UserController userContoller = (UserController)ctx.getBean("userController");
userContoller.execute();
// 业务层
UserService userService = (UserService) ctx.getBean("userService");
userService.add();
// 持久层
UserRepository userRepository = (UserRepository)ctx.getBean("userRepository");
userRepository.save();
}
}输出:
user->User [id=0, name=null]
User [id=0, name=null]
UserRepositoryImpl save
UserService add
UserController execute
User [id=0, name=null]
UserRepositoryImpl save
UserService add
User [id=0, name=null]
UserRepositoryImpl save