用annotation配置只在源代码相应的地方加入annotation即可,xml就不用再来回来去改了,开发时候快,不过我觉得没xml清楚。
一:修改配置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-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config/>
<context:component-scan base-package="com.rt.springdemo"></context:component-scan>
</beans>
其中这两句是新加且必须的,新加了一个命名空间:xml的namespace
xmlns:context="http://www.springframework.org/schema/context"
<context:annotation-config/>
其实annotation全写对了的话,配置文件就是最上边那样了(package要改),不用再加别的东西了。
二: @Autowired
在server层的setter上,加上@Autowired,相当于省略了property name=“XXX”
@Autowired
public void setUserDAO(IUserDAO userDAO) {//xml中调用的方法
this.userDAO = userDAO;
}
但被注入文件的初始化等还得手动来,也就是说,@Autowired省略了下边注释里的东西
<bean id="u1" class="com.rt.springdemo.dao.impl.UserDAOImpl" />
<bean name="userService01" class="com.rt.springdemo.service.UserService">
<!--1.property这句就相当于设置了属性,也就是调用 set【UserDao】(【u1】) -->
<!--在server层的setter上,加上@Autowired,相当于省略了property name=“XXX” -->
<!--<property name="userDAO" ref="u1" />-->
</bean>
三:@Qualifier
@Qualifier(value=" ObjNoX ")可以解决,多个相同类型文件注入时匹配的问题:
如果xml中,存在两个相同类型的实例: u1 和u2, @Autowired后程序不知道你到底要注入哪一个
<bean id="u1" class="com.rt.springdemo.dao.impl.UserDAOImpl" />
<bean id="u2" class="com.rt.springdemo.dao.impl.UserDAOImpl" />
<bean name="userService01" class="com.rt.springdemo.service.UserService">
这样就会有错,这时候就要用@Qualifier指定一下
@Autowired
public void setUserDAO(@Qualifier(value="u1") IUserDAO userDAO) {//xml中调用的方法
this.userDAO = userDAO;
}
@Qualifier(value="u1"就说的很清楚了,我要注入u1
四:@Resource
@Resource(name=" ObjNoX "),一样可以解决上边第三点说到的问题
<bean id="u1" class="com.rt.springdemo.dao.impl.UserDAOImpl" />
<bean id="u2" class="com.rt.springdemo.dao.impl.UserDAOImpl" />
<bean name="userService01" class="com.rt.springdemo.service.UserService">
service层这么写:
@Resource(name="u1")
public void setUserDAO(IUserDAO userDAO) {//xml中调用的方法
this.userDAO = userDAO;
}
五:@Component
xml配置文件里还剩<bean>标签还比较啰嗦。
可用在相应的类的上边,声明@Component(value=" userService01 "),代替对bean的规定
如:
@Component(value="u1")
public class UserDAOImpl implements IUserDAO {
}
就相当于代替了
<bean id="u1" class="com.rt.springdemo.dao.impl.UserDAOImpl" />
再如:
@Component(value="userService01")
public class UserService {
}
就相当于代替了
<bean name="userService01" class="com.rt.springdemo.service.UserService">
...
</bean>