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 回头用的时候再补充吧