Annotation注解:
JDK1.5之后开始提供支持
在Spring IoC部分中,对于bean的配置,有两种方式,一种是通过xml来配置,另外一种就是使用Annotation
@Autowired注解的意思是自动装配(自动注入属性)
比如我们有一个UserDAO需要被注入,我们可以这样写:
<bean id="u1" class="com.ccniit.dao.impl.UserDAOImpl"></bean>
其中UserDAOImpl是UserDAO的实现类,UserDAO是一个接口
在java代码中,我们这样将 u 注入进去:
@Autowired会自动的在xml文件中寻找与UserDAO类型相同的bean并且注入进去(经过简单的实验,xml文件中只能有一个UserDAO的bean,否则会报错)
private UserDAO userDAO;
@Autowired
public void setUserDAO(UserDAO userDAO)
{
this.userDAO = userDAO;
}
这样之后,我们就能使用这个userDAO了,如果这里不加@Autowired注解,xml配置文件里面也没有进行ref方式的注入,那么,运行程序的时候会报userDAO的空指针错误
上面说过,@Autowired是寻找类型注入的所以是byType类型,所以两个相同的类型会报错误,怎么解决这个问题呢?
这里我们就要用到@Qualifier了,如下:
xml:
<bean id="u1" class="com.ccniit.dao.impl.UserDAOImpl">
<property name="uId" value="1"></property>
</bean>
<bean id="u2" class="com.ccniit.dao.impl.UserDAOImpl">
<property name="uId" value="2"></property>
</bean>
java:
@Autowired
@Qualifier(value = "u2")
public void setUserDAO(UserDAO userDAO)
{
this.userDAO = userDAO;
}
这样,我们找到的就是id为u2的类,为了区分它们,我们给这个实现类加一个ID值分别赋值为1和2,在上面的xml代码中有体现了。
u2的运行打印结果:
uId = 2
u1的运行打印结果:
uId = 1