spring5.x版本 java配置和annotation配置说明
java配置
@Configuration //这个注解的意思是相当于把此类当作一个xml文件 public class AppConfig { @Bean(name="userService") //这个注解相当于xml文件里的<bean> public UserService userService() { UserService service = new UserService(); service.setUserDAO(userDAOIml()); return service; } @Bean public UserDAOIml userDAOIml() { return new UserDAOIml(); } }
public class UserServiceTest { @Test public void testAdd() { ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); // UserService service = (UserService)context.getBean(UserService.class); UserService service = (UserService)context.getBean("userService"); User user = new User(); user.setName("xxx"); user.setPassword("123456"); service.add(user); } }
这样就不需要XML文件了。直接用类名或者Bean名都可以获取。
Annotation配置
首先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: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.xsd"> <!-- 开启annotation配置 --> <context:annotation-config/> <!-- 扫描以com开头的包里边的bean --> <context:component-scan base-package="com"/> </beans>
接着用@Repository配置这两个实现同一个接口的DAO。
@Repository public class UserDAOIml implements UserDAO { @Override public void save(User user) { // TODO Auto-generated method stub System.out.println("UserDAOIml: -----save a user"); } } @Repository public class UserDAOIml2 implements UserDAO { @Override public void save(User user) { // TODO Auto-generated method stub System.out.println("UserDAOIml2: -----save a user"); } }
接下来配置调用的类
@Service public class UserService { @Autowired @Qualifier("userDAOIml2") //如果没有这句就会报错,Spring不知道该注入哪个实现类 private UserDAO userDAO; public UserService() { // TODO Auto-generated constructor stub System.out.println("初始化"); } public UserDAO getUserDAO() { return userDAO; } public void setUserDAO(UserDAO userDAO) { this.userDAO = userDAO; } public void add(User user) { userDAO.save(user); } }
试过不加@Service也能运行成功,暂时不知道啥情况
调用方法
@Test public void testAdd() { ApplicationContext context = new ClassPathXmlApplicationContext("benasAnnotation.xml"); UserService service = (UserService)context.getBean(UserService.class); User user = new User(); user.setName("xxx"); user.setPassword("123456"); service.add(user); } }
Spring提供四种配置bean的注解。目前测试暂时效果都一样的
@Component @Controller @Service @Repository 回头用的时候再补充吧