Resource
Resource 资源,默认时byName寻找,找不到用byType,可以指定特定的名称。
将注解加到需要实现注入的方法上。
@Resource(name="UserDAO2")
public void setUserDAO( UserDAO userDAO) {
this.userDAO = userDAO;
}
xml配置
<bean id="UserDAO" class="com.login.dao.impl.UserDAOImpl"></bean>
<bean id="UserDAO2" class="com.login.dao.impl.UserDAOImpl"></bean>
<bean id="userService" class="com.login.service.UserService"></bean>
Componet
组件,配合Resource使用。
1.配置<context:component-scan base-package="com.login"></context:component-scan>
标签,用来扫描base-package下的包,寻找componet注解,自动实现容器注入。
<?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">
<context:annotation-config/>
<context:component-scan base-package="com.login"></context:component-scan>
</beans>
2.在需要实现注入的类上添加注解,指定注入容器的key为u,值则是该类的对象。
@Component("u")
public class UserDAOImpl implements UserDAO{
@Override
public void save() {
System.out.println("user add to mysql...");
}
}
3.使用Resource获取容器中key
@Component("userService")
public class UserService {
private UserDAO userDAO ;
public UserService(){
}
public void init(){
System.out.println("init");
}
public UserDAO getUserDAO() {
return userDAO;
}
@Resource(name="u")
public void setUserDAO( UserDAO userDAO) {
this.userDAO = userDAO;
}
public void add(User u){
userDAO.save();
}
public void destroy(){
System.out.println("destroy");
}
}
4.test
BeanFactory apc = new ClassPathXmlApplicationContext("beans.xml");
UserService service = (UserService) apc.getBean("userService");
service.add(new User());
调用getBean方法从容器中获取key为userService的对象。然后调用@Resource注解的方法,将容器中key为u的对象注入到方法中。再调用add方法将数据保存。