关键代码:
@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