在annotation还有一种完全注解方法,不用在spring xml里面配置bean 直接在具体类上进行注解bean的名称
这样就不用在xml里面进行每个需要注入的类都添加一个<bean/>,但是首先要说下@Resource这个注解,然后再说不配<bean/>的方法
@Resource顾名思义——资源,同样跟@AutoWired作用一样,在setter方法体上进行注解注入
-----
@Resource //这种默认按照autowire="byType" 来进行检索注入
@Resource(name="u") // 这种当然就是按照autowire="byName" 来注解
案例代码如下:
需要被注入的UserService:
package com.springdemo.service.impl;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import com.springdemo.dao.IUserDao;
import com.springdemo.service.IUserService;
@Component("userService")
public class UserService implements IUserService {
protected IUserDao dao;
public IUserDao getDao() {
return dao;
}
@Resource(name="userDaoImpl")
public void setDao(IUserDao dao) {
this.dao = dao;
}
@Override
public void add() {
// TODO Auto-generated method stub
dao.add();
}
@Override
public void del() {
// TODO Auto-generated method stub
dao.del();
}
@Override
public void update() {
// TODO Auto-generated method stub
dao.update();
}
}
在setter器中可以看到注解@Resource(name="userDaoImpl")
再就是注入的UserDaoImpl:
package com.springdemo.dao.impl;
import org.springframework.stereotype.Component;
import com.springdemo.dao.IUserDao;
@Component("userDaoImpl")
public class UserDaoImpl implements IUserDao {
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public void add() {
// TODO Auto-generated method stub
System.out.println("UserDaoImpl.add()");
System.out.println("id=" + id);
}
@Override
public void del() {
// TODO Auto-generated method stub
System.out.println("UserDaoImpl.del()");
System.out.println("id=" + id);
}
@Override
public void update() {
// TODO Auto-generated method stub
System.out.println("UserDaoImpl.update()");
System.out.println("id=" + id);
}
}
然后再就是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 />
<!-- 不用配bean xml的时候需要指定被@Component注解过的Class所在的包,这里提供检索 -->
<context:component-scan base-package="com.springdemo" />
</beans>
这个时候就能很清楚的明白@Component的作用了,相信我再不用说如何配置不配置bean的方法。
@Component就是注解一个Class 成一个Bean,xml没有配置bean全部靠它,其中@Component有缺省规则,如下
@Component //这个把当前Class的命名为首字母小写的bean
@Component("userDaoImpl") 当然这个就是直接制定表示的bean的name值
使用此注解最好是制定bean的值,保证准确性。
注解是一个比较方便的一种途径,在开发过程中使用率非常高,注入通常很少修改,甚至出现没有源代码只能通过xml修改方式修改注入的情况几乎不多见,所以能用注解就注解。
补充一点需要添加common-annotation.jar包